Trabajar con imágenes

La clase Nette\Utils\Image simplifica la manipulación de imágenes: cambiar su tamaño, recortarlas, enfocarlas, dibujar en ellas o combinar varias.

PHP tiene un amplio conjunto de funciones para manipular imágenes. Su API, sin embargo, no es muy amable. No sería Nette Framework si no se hubiera sacado de la manga una API deliciosa.

Instalación:

composer require nette/utils

Los ejemplos siguientes suponen que está definido el siguiente alias de clase:

use Nette\Utils\Image;
use Nette\Utils\ImageColor;
use Nette\Utils\ImageType;

Crear una imagen

Cree una imagen nueva en color real, por ejemplo de 100×200:

$image = Image::fromBlank(100, 200);

Opcionalmente puede indicar el color de fondo (el predeterminado es negro):

$image = Image::fromBlank(100, 200, ImageColor::rgb(125, 0, 0));

O cargar una imagen desde un archivo:

$image = Image::fromFile('nette.jpg');

Guardar la imagen

La imagen se puede guardar en un archivo:

$image->save('resampled.jpg');

Puede indicar la calidad de compresión en el rango 0–100 para JPEG (predeterminada 85), WEBP (predeterminada 80) y AVIF (predeterminada 30), y 0–9 para PNG (predeterminada 9):

$image->save('resampled.jpg', 80); // JPEG, calidad 80 %

Si el formato no queda claro por la extensión del archivo, se puede indicar con una constante:

$image->save('resampled.tmp', null, ImageType::JPEG);

En lugar de guardarla en disco, la imagen se puede escribir en una variable:

$data = $image->toString(ImageType::JPEG, 80); // JPEG, calidad 80 %

o enviarla directamente al navegador con la cabecera HTTP Content-Type adecuada:

// envía la cabecera Content-Type: image/png
$image->send(ImageType::PNG);

Formatos

Los formatos admitidos son JPEG, PNG, GIF, WebP, AVIF y BMP. Su versión de PHP debe admitirlos también, algo que puede verificar con la función isTypeSupported(). Las animaciones no están admitidas.

Los formatos se representan mediante las constantes ImageType::JPEG, ImageType::PNG, ImageType::GIF, ImageType::WEBP, ImageType::AVIF e ImageType::BMP.

$supported = Image::isTypeSupported(ImageType::JPEG);

¿Necesita detectar el formato de la imagen al cargarla? El método lo devuelve en el segundo parámetro:

$image = Image::fromFile('nette.jpg', $type);

La detección sin cargar la propia imagen la hace Image::detectTypeFromFile().

Cambiar el tamaño

Una operación habitual es cambiar el tamaño de una imagen. Las dimensiones actuales las devuelven los métodos getWidth() y getHeight().

Para cambiar el tamaño se usa el método resize(). Ejemplo de cambio proporcional para que la imagen no supere los 500×300 píxeles (o el ancho será exactamente 500 px, o la altura será exactamente 300 px; una de las dimensiones se calcula para mantener la proporción):

$image->resize(500, 300);

Es posible indicar solo una dimensión y que la otra se calcule automáticamente:

$image->resize(500, null); // ancho 500 px, alto calculado automáticamente

$image->resize(null, 300); // ancho calculado automáticamente, alto 300 px

Cualquiera de las dimensiones se puede indicar también en porcentaje:

$image->resize('75%', 300); // 75 % × 300px

El comportamiento de resize() se puede influir con las siguientes banderas. Todas ellas, salvo Image::Stretch, conservan la proporción.

Bandera Descripción
Image::OrSmaller (predeterminada) las dimensiones resultantes serán menores o iguales que las solicitadas
Image::OrBigger rellena (y quizá supere en una dimensión) el área de destino
Image::Cover rellena el área de destino y recorta lo que sobresalga
Image::ShrinkOnly solo reduce (evita estirar una imagen pequeña)
Image::Stretch no conserva la proporción

Las banderas se pasan como tercer argumento del método:

$image->resize(500, 300, Image::OrBigger);

Las banderas se pueden combinar:

$image->resize(500, 300, Image::ShrinkOnly | Image::Stretch);

Las imágenes se pueden voltear en vertical o en horizontal indicando una de las dimensiones (o ambas) como número negativo:

$flipped = $image->resize(null, '-100%'); // voltea verticalmente

$flipped = $image->resize('-100%', '-100%'); // rota 180°

$flipped = $image->resize(-125, 500); // redimensiona y voltea horizontalmente

Tras cambiar el tamaño de una imagen puede mejorar su aspecto con un enfoque suave:

$image->sharpen();

Recortar

Para recortar se usa el método crop():

$image->crop($left, $top, $width, $height);

Igual que en resize(), todos los valores se pueden indicar en porcentaje. Los porcentajes de $left y $top se calculan sobre el espacio restante, de forma parecida a la propiedad CSS background-position:

$image->crop('100%', '50%', '80%', '80%');

La imagen también se puede recortar automáticamente, por ejemplo para eliminar los bordes negros:

$image->cropAuto(IMG_CROP_BLACK);

El método cropAuto() es un envoltorio orientado a objetos de la función imagecropauto(); encontrará más información en su documentación.

Colores

El método ImageColor::rgb() le permite definir un color con valores de rojo, verde y azul (RGB). Opcionalmente puede indicar también un valor de transparencia, de 0 (totalmente transparente) a 1 (totalmente opaco), igual que en CSS.

$color = ImageColor::rgb(255, 0, 0); // Rojo
$transparentBlue = ImageColor::rgb(0, 0, 255, 0.5); // Azul semitransparente

El método ImageColor::hex() le permite definir un color en formato hexadecimal, como en CSS. Admite los formatos #rgb, #rrggbb, #rgba y #rrggbbaa:

$color = ImageColor::hex("#F00"); // Rojo
$transparentGreen = ImageColor::hex("#00FF0080"); // Verde semitransparente

Los colores se pueden usar en otros métodos, como ellipse(), fill(), etc.

Dibujar y editar

Tiene a su disposición todas las funciones de PHP para manipular imágenes, vea el Resumen de métodos, pero envueltas en un estilo orientado a objetos:

$image->filledEllipse($centerX, $centerY, $width, $height, ImageColor::rgb(255, 0, 0));

Como las funciones nativas de PHP para dibujar rectángulos resultan algo incómodas por la forma de indicar las coordenadas, la clase Image ofrece sustitutas: rectangleWH() y filledRectangleWH().

Combinar varias imágenes

Puede colocar fácilmente otra imagen sobre la actual:

$logo = Image::fromFile('logo.png');
$blank = Image::fromBlank(320, 240, ImageColor::rgb(52, 132, 210));

// las coordenadas también se pueden indicar en porcentaje
$blank->place($logo, '80%', '80%'); // coloca cerca de la esquina inferior derecha

Al colocarla se respeta el canal alfa. Además, puede influir en la transparencia de la imagen colocada (para crear una marca de agua):

$blank->place($image, '80%', '80%', 25); // la opacidad es del 25 %

¡Usar una API así es un verdadero placer!

Resumen de métodos

static fromBlank (int $width, int $height, ?ImageColor $color=null)Image

Crea una imagen nueva en color real con las dimensiones dadas. El color predeterminado es el negro.

static fromFile (string $file, int &$detectedFormat=null, string &$warnings=null)Image

Lee una imagen desde un archivo y devuelve su tipo en $detectedFormat. Si pasa $warnings, los avisos no fatales del decodificador de imágenes se guardan ahí en lugar de emitirse como advertencia de PHP; queda en null cuando no hay ninguno.

static fromString (string $s, int &$detectedFormat=null, string &$warnings=null)Image

Lee una imagen desde una cadena y devuelve su tipo en $detectedFormat. Si pasa $warnings, los avisos no fatales del decodificador de imágenes se guardan ahí en lugar de emitirse como advertencia de PHP; queda en null cuando no hay ninguno.

static rgb (int $red, int $green, int $blue, int $transparency=0)array

Esta función ha sido sustituida por la clase ImageColor, vea Colores.

static typeToExtension (int $type)string

Devuelve la extensión de archivo del tipo dado.

static typeToMimeType (int $type)string

Devuelve el tipo MIME del tipo dado.

static extensionToType (string $extension)int

Devuelve el tipo de imagen según la extensión del archivo.

static detectTypeFromFile (string $file, int &$width=null, int &$height=null)?int

Devuelve el tipo del archivo de imagen y, en los parámetros $width y $height, también sus dimensiones.

static detectTypeFromString (string $s, int &$width=null, int &$height=null)?int

Devuelve el tipo de la imagen a partir de una cadena y, en los parámetros $width y $height, también sus dimensiones.

static isTypeSupported (int $type)bool

Comprueba si el tipo de imagen dado está admitido.

static getSupportedTypes(): array

Devuelve un array con los tipos de imagen admitidos.

static calculateTextBox (string $text, string $fontFile, float $size, float $angle=0, array $options=[])array

Calcula las dimensiones del rectángulo que delimita el texto con una fuente y un tamaño dados. Devuelve un array asociativo con las claves left, top, width, height. El margen izquierdo puede ser negativo si el texto empieza con un saliente de kerning por la izquierda.

affine (array $affine, ?array $clip=null)Image

Devuelve una imagen con la imagen de origen transformada de forma afín, usando un área de recorte opcional. (más).

alphaBlending (bool $on)void

Permite dos modos distintos de dibujo en las imágenes en color real. En el modo de mezcla, la componente del canal alfa del color pasado a todas las funciones de dibujo, como setPixel(), determina cuánto debe transparentarse el color subyacente. Como resultado, mezcla automáticamente el color existente en ese punto con el color de dibujo y guarda el resultado en la imagen. El píxel resultante es opaco. En el modo sin mezcla, el color de dibujo se copia literalmente con la información de su canal alfa y sustituye al píxel de destino. El modo de mezcla no está disponible al dibujar en imágenes en paleta. (más)

antialias (bool $on): void

Activa los métodos rápidos de dibujo con suavizado para las líneas y los polígonos de alambre. No admite componentes alfa. Funciona mediante una operación directa de mezcla. Solo funciona con imágenes en color real.

Usar primitivas suavizadas con un color de fondo transparente puede acabar con resultados inesperados. El método de mezcla usa el color de fondo como cualquier otro color. La falta de soporte del componente alfa no permite un método de suavizado basado en alfa. (más)

arc (int $centerX, int $centerY, int $width, int $height, int $startAngle, int $endAngle, ImageColor $color)void

Dibuja un arco circular centrado en las coordenadas dadas. (más)

colorAllocate (int $red, int $green, int $blue)int

Devuelve un identificador de color que representa el color compuesto por las componentes RGB dadas. Hay que llamarlo para crear cada color que vaya a usarse en la imagen. (más)

colorAllocateAlpha (int $red, int $green, int $blue, int $alpha)int

Se comporta igual que colorAllocate(), con el añadido del parámetro de transparencia $alpha. (más)

colorAt (int $x, int $y)int

Devuelve el índice de color del píxel situado en la posición indicada de la imagen. Si la imagen es en color real, esta función devuelve el valor RGB de ese píxel como entero. Use desplazamientos de bits y máscaras para acceder por separado a las componentes de rojo, verde y azul: (más)

colorClosest (int $red, int $green, int $blue)int

Devuelve el índice del color de la paleta de la imagen que está “más cerca” del valor RGB indicado. La “distancia” entre el color deseado y cada color de la paleta se calcula como si los valores RGB representasen puntos en un espacio tridimensional. (más)

colorClosestAlpha (int $red, int $green, int $blue, int $alpha)int

Devuelve el índice del color de la paleta de la imagen que está “más cerca” del valor RGB y del nivel $alpha indicados. (más)

colorClosestHWB (int $red, int $green, int $blue)int

Obtiene el índice del color cuyo tono, blancura y negrura están más cerca del color dado. (más)

colorDeallocate (int $color)void

Libera un color reservado previamente con colorAllocate() o colorAllocateAlpha(). (más)

colorExact (int $red, int $green, int $blue)int

Devuelve el índice del color indicado en la paleta de la imagen. (más)

colorExactAlpha (int $red, int $green, int $blue, int $alpha)int

Devuelve el índice del color + alfa indicado en la paleta de la imagen. (más)

colorMatch (Image $image2)void

Aproxima los colores de la versión en paleta de una imagen a los de su versión en color real. (más)

colorResolve (int $red, int $green, int $blue)int

Devuelve un índice de color para el color solicitado, ya sea el color exacto o la alternativa más próxima posible. (más)

colorResolveAlpha (int $red, int $green, int $blue, int $alpha)int

Devuelve un índice de color para el color solicitado, ya sea el color exacto o la alternativa más próxima posible. (más)

colorSet (int $index, int $red, int $green, int $blue, int $alpha=0)void

Fija el índice indicado de la paleta al color indicado. (más)

colorsForIndex (int $index)array

Obtiene el color correspondiente a un índice dado. (más)

colorsTotal(): int

Devuelve el número de colores de la paleta de la imagen. (más)

colorTransparent (?int $color=null)int

Obtiene o fija el color transparente de la imagen. (más)

convolution (array $matrix, float $div, float $offset)void

Aplica a la imagen una matriz de convolución, usando el coeficiente y el desplazamiento dados. (más)

Requiere la Bundled GD extension, así que puede no funcionar en todas partes.

copy (Image $src, int $dstX, int $dstY, int $srcX, int $srcY, int $srcW, int $srcH)void

Copia una parte de $src en la imagen, empezando en las coordenadas $srcX, $srcY, con un ancho de $srcW y una altura de $srcH. La porción definida se copiará en las coordenadas $dstX y $dstY. (más)

copyMerge (Image $src, int $dstX, int $dstY, int $srcX, int $srcY, int $srcW, int $srcH, int $opacity)void

Copia una parte de $src en la imagen, empezando en las coordenadas $srcX, $srcY, con un ancho de $srcW y una altura de $srcH. La porción definida se copiará en las coordenadas $dstX y $dstY. (más)

copyMergeGray (Image $src, int $dstX, int $dstY, int $srcX, int $srcY, int $srcW, int $srcH, int $opacity)void

Copia una parte de $src en la imagen, empezando en las coordenadas $srcX, $srcY, con un ancho de $srcW y una altura de $srcH. La porción definida se copiará en las coordenadas $dstX y $dstY.

Esta función es idéntica a copyMerge(), salvo que al mezclar conserva el tono del origen convirtiendo los píxeles de destino a escala de grises antes de la operación de copia. (más)

copyResampled (Image $src, int $dstX, int $dstY, int $srcX, int $srcY, int $dstW, int $dstH, int $srcW, int $srcH)void

Copia una porción rectangular de una imagen a otra, interpolando suavemente los valores de los píxeles, de modo que, en particular, reducir el tamaño de una imagen conserve gran parte de su nitidez.

Dicho de otro modo, copyResampled() toma de $src un área rectangular de ancho $srcW y altura $srcH en la posición ($srcX,$srcY) y la coloca en un área rectangular de la imagen de ancho $dstW y altura $dstH en la posición ($dstX,$dstY).

Si las coordenadas y los anchos y alturas de origen y destino difieren, se realizará el estiramiento o la reducción correspondiente del fragmento de imagen. Las coordenadas se refieren a la esquina superior izquierda. Esta función se puede usar para copiar regiones dentro de la misma imagen, pero si las regiones se solapan los resultados serán impredecibles. (más)

copyResized (Image $src, int $dstX, int $dstY, int $srcX, int $srcY, int $dstW, int $dstH, int $srcW, int $srcH)void

Copia una porción rectangular de una imagen a otra. Dicho de otro modo, copyResized() toma de $src un área rectangular de ancho $srcW y altura $srcH en la posición ($srcX,$srcY) y la coloca en un área rectangular de la imagen de ancho $dstW y altura $dstH en la posición ($dstX,$dstY).

Si las coordenadas y los anchos y alturas de origen y destino difieren, se realizará el estiramiento o la reducción correspondiente del fragmento de imagen. Las coordenadas se refieren a la esquina superior izquierda. Esta función se puede usar para copiar regiones dentro de la misma imagen, pero si las regiones se solapan los resultados serán impredecibles. (más)

crop (int|string $left, int|string $top, int|string $width, int|string $height)Image

Recorta la imagen al área rectangular dada. Las dimensiones se pueden indicar como enteros en píxeles o como cadenas en porcentaje (por ejemplo, '50%').

cropAuto (int $mode=0, float $threshold=.5, ?ImageColor $color=null)Image

Recorta automáticamente la imagen según el $mode dado. (más)

ellipse (int $centerX, int $centerY, int $width, int $height, ImageColor $color)void

Dibuja una elipse centrada en las coordenadas indicadas. (más)

fill (int $x, int $y, ImageColor $color)void

Realiza un relleno por inundación a partir de la coordenada dada (la esquina superior izquierda es 0, 0) con el color $color dado. (más)

filledArc (int $centerX, int $centerY, int $width, int $height, int $startAngle, int $endAngle, ImageColor $color, int $style)void

Dibuja un arco parcial centrado en las coordenadas indicadas. (más)

filledEllipse (int $centerX, int $centerY, int $width, int $height, ImageColor $color)void

Dibuja una elipse centrada en las coordenadas indicadas. (más)

filledPolygon (array $points, ImageColor $color)void

Crea un polígono relleno en la imagen. (más)

filledRectangle (int $x1, int $y1, int $x2, int $y2, ImageColor $color)void

Crea en la imagen un rectángulo relleno con $color, que empieza en el punto ($x1, $y1) y termina en ($x2, $y2). El punto (0, 0) es la esquina superior izquierda de la imagen. (más)

filledRectangleWH (int $x, int $y, int $width, int $height, ImageColor $color)void

Crea en la imagen un rectángulo relleno con $color, que empieza en el punto ($x, $y) y tiene un ancho $width y una altura $height. El punto (0, 0) es la esquina superior izquierda de la imagen.

fillToBorder (int $x, int $y, ImageColor $borderColor, ImageColor $color)void

Realiza un relleno por inundación cuyo color de borde se define con $borderColor. El punto de partida del relleno es ($x, $y) (la esquina superior izquierda es 0, 0) y la región se rellena con el color $color. (más)

filter (int $filtertype, int …$args)void

Aplica a la imagen el filtro $filtertype dado. (más)

flip (int $mode): void

Voltea la imagen según el $mode dado. (más)

ftText (float $size, float $angle, int $x, int $y, ImageColor $color, string $fontFile, string $text, array $options=[])array

Escribe texto en la imagen. (más)

gammaCorrect (float $inputgamma, float $outputgamma)void

Aplica a la imagen una corrección gamma a partir de una gamma de entrada y otra de salida. (más)

getClip(): array

Obtiene el rectángulo de recorte actual, es decir, el área fuera de la cual no se dibujará ningún píxel. (más)

getHeight(): int

Devuelve la altura de la imagen.

getImageResource(): GdImage

Devuelve el recurso de imagen GD subyacente.

getWidth(): int

Devuelve el ancho de la imagen.

interlace (?int $interlace=null)int

Activa o desactiva el entrelazado. Si el entrelazado está activado y la imagen se guarda como JPEG, se guardará como JPEG progresivo. (más)

isTrueColor(): bool

Comprueba si la imagen es en color real. (más)

layerEffect (int $effect)void

Fija la bandera de mezcla alfa para usar efectos de capas. (más)

line (int $x1, int $y1, int $x2, int $y2, ImageColor $color)void

Dibuja una línea entre los dos puntos dados. (más)

openPolygon (array $points, ImageColor $color)void

Dibuja un polígono abierto en la imagen. A diferencia de polygon(), no se dibuja ninguna línea entre el último punto y el primero. (más)

paletteCopy (Image $source)void

Copia la paleta de $source a la imagen. (más)

paletteToTrueColor(): void

Convierte una imagen basada en paleta en una imagen en color real. (más)

place (Image $image, int|string $left=0, int|string $top=0, int $opacity=100)Image

Copia $image sobre la imagen actual en las coordenadas ($left, $top). Las coordenadas se pueden indicar como enteros en píxeles o como cadenas en porcentaje (por ejemplo, '50%').

polygon (array $points, ImageColor $color)void

Crea un polígono en la imagen. (más)

rectangle (int $x1, int $y1, int $x2, int $y2, ImageColor $color)void

Crea un rectángulo en las coordenadas indicadas. (más)

rectangleWH (int $x, int $y, int $width, int $height, ImageColor $color)void

Crea un rectángulo en las coordenadas dadas usando ancho y altura.

resize (int|string $width, int|string $height, int $mode=Image::OrSmaller)Image

Cambia el tamaño de la imagen, vea más información. Las dimensiones se pueden indicar como enteros en píxeles o como cadenas en porcentaje (por ejemplo, '50%').

resolution (?int $resX=null, ?int $resY=null)mixed

Permite fijar y obtener la resolución de una imagen en DPI (puntos por pulgada). Si no se indica ninguno de los parámetros opcionales, se devuelve la resolución actual como array indexado. Si solo se indica $resX, la resolución horizontal y la vertical se fijan a ese valor. Si se indican ambos parámetros opcionales, la resolución horizontal y la vertical se fijan a esos valores, respectivamente.

La resolución solo se usa como metainformación cuando las imágenes se leen y se escriben en formatos que admiten este tipo de información (actualmente PNG y JPEG). No afecta a ninguna operación de dibujo. La resolución predeterminada de las imágenes nuevas es de 96 DPI. (más)

rotate (float $angle, ImageColor $backgroundColor)Image

Rota la imagen el $angle dado en grados. El centro de rotación es el centro de la imagen, y la imagen rotada puede tener dimensiones distintas de las de la original. (más)

Requiere la Bundled GD extension, así que puede no funcionar en todas partes.

save (string $file, ?int $quality=null, ?int $type=null)void

Guarda la imagen en un archivo.

La calidad de compresión va de 0 a 100 para JPEG (predeterminada 85), WEBP (predeterminada 80) y AVIF (predeterminada 30), y de 0 a 9 para PNG (predeterminada 9). Si el tipo no queda claro por la extensión del archivo, puede indicarlo con una de las constantes de ImageType.

saveAlpha (bool $saveflag)void

Fija la bandera que determina si debe guardarse la información completa del canal alfa (frente a la transparencia de un solo color) al guardar imágenes PNG.

Nette activa esta bandera en el constructor de Image, así que una imagen cargada o creada con fromFile(), fromString() o fromBlank() conserva su canal alfa. Tenga en cuenta que, con el modo de mezcla predeterminado, el alfa de un color dibujado solo sirve para mezclar el resultado y no se guarda, así que llame antes a alphaBlending(false) si la transparencia dibujada debe sobrevivir. (más)

scale (int $newWidth, int $newHeight=-1, int $mode=IMG_BILINEAR_FIXED)Image

Escala una imagen con el algoritmo de interpolación dado. (más)

send (int $type=ImageType::JPEG, ?int $quality=null)void

Envía la imagen al navegador.

La calidad de compresión va de 0 a 100 para JPEG (predeterminada 85), WEBP (predeterminada 80) y AVIF (predeterminada 30), y de 0 a 9 para PNG (predeterminada 9).

setBrush (Image $brush)void

Fija la imagen de pincel que usarán todas las funciones de dibujo de líneas (como line() y polygon()) al dibujar con los colores especiales IMG_COLOR_BRUSHED o IMG_COLOR_STYLEDBRUSHED. (más)

setClip (int $x1, int $y1, int $x2, int $y2)void

Fija el rectángulo de recorte actual, es decir, el área fuera de la cual no se dibujará ningún píxel. (más)

setInterpolation (int $method=IMG_BILINEAR_FIXED)void

Fija el método de interpolación, que afecta a los métodos rotate() y affine(). (más)

getInterpolation(): int

Devuelve el método de interpolación actual que usan los métodos rotate() y affine().

setPixel (int $x, int $y, ImageColor $color)void

Dibuja un píxel en la coordenada indicada. (más)

setStyle (array $style)void

Fija el estilo que usarán todas las funciones de dibujo de líneas (como line() y polygon()) al dibujar con el color especial IMG_COLOR_STYLED o líneas de imágenes con el color IMG_COLOR_STYLEDBRUSHED. (más)

setThickness (int $thickness)void

Fija en $thickness píxeles el grosor de las líneas dibujadas al trazar rectángulos, polígonos, arcos, etc. (más)

setTile (Image $tile)void

Fija la imagen de mosaico que usarán todas las funciones de relleno de regiones (como fill() y filledPolygon()) al rellenar con el color especial IMG_COLOR_TILED.

Un mosaico es una imagen que se usa para rellenar un área con un patrón repetido. Cualquier imagen puede servir de mosaico y, fijando con colorTransparent() el índice de color transparente de la imagen de mosaico, se puede crear un mosaico que deje transparentarse ciertas partes del área subyacente. (más)

sharpen(): Image

Enfoca la imagen.

Requiere la Bundled GD extension, así que puede no funcionar en todas partes.

toString (int $type=ImageType::JPEG, ?int $quality=null)string

Devuelve la imagen como cadena.

La calidad de compresión va de 0 a 100 para JPEG (predeterminada 85), WEBP (predeterminada 80) y AVIF (predeterminada 30), y de 0 a 9 para PNG (predeterminada 9).

trueColorToPalette (bool $dither, int $ncolors)void

Convierte una imagen en color real en una imagen en paleta. (más)

ttfText (float $size, float $angle, int $x, int $y, ImageColor $color, string $fontFile, string $text, array $options=[])array

Escribe en la imagen el texto dado. (más)

versión: 4.x