Clase de manipulación de imágenes
La clase de manipulación de imágenes de Higgs le permite realizar lo siguiente comportamiento:
Cambio de tamaño de imagen
Creación de miniaturas
Recorte de imágenes
Rotación de imagen
Marca de agua de imagen
Se admiten las siguientes bibliotecas de imágenes: GD/GD2 e ImageMagick.
Inicializando la clase
Como la mayoría de las otras clases en Higgs, la clase de imagen se inicializa en su controlador llamando a la clase Servicios:
<?php
$image = \Config\Services::image();
Puede pasar el alias de la biblioteca de imágenes que desea utilizar al Función de servicio:
<?php
$image = \Config\Services::image('imagick');
Los controladores disponibles son los siguientes:
gd
La biblioteca de imágenes GD/GD2imagick
La biblioteca ImageMagick.
Si utiliza la biblioteca ImageMagick, debe establecer la ruta a la biblioteca en su servidor en app/Config/Images.php.
Nota
The ImageMagick handler requires the imagick extension.
Procesando una imagen
Independientemente del tipo de procesamiento que desee realizar (cambiar el tamaño, recortar, rotar o marcar con marca de agua), el proceso general es idéntico. Establecerás algunas preferencias correspondientes a la acción que deseas pretende realizar, luego llame a una de las funciones de procesamiento disponibles. Por ejemplo, para crear una miniatura de imagen, harás esto:
<?php
$image->withFile('/path/to/image/mypic.jpg')
->fit(100, 100, 'center')
->save('/path/to/image/mypic_thumb.jpg');
El código anterior le dice a la biblioteca que busque una imagen.
llamado mypic.jpg ubicado en la carpeta source_image, luego cree un
nueva imagen que es de 100 x 100 píxeles usando la biblioteca de imágenes GD2,
y guárdelo en un archivo nuevo (el pulgar). Dado que está utilizando el método fit()
,
Intentará encontrar la mejor parte de la imagen para recortar según el
relación de aspecto deseada y luego recorte y cambie el tamaño del resultado.
Una imagen se puede procesar a través de tantos métodos disponibles como sea posible. necesario antes de guardar. La imagen original no se modifica y se crea una nueva imagen. se utiliza y se pasa a través de cada método, aplicando los resultados sobre el resultados anteriores:
<?php
$image->withFile('/path/to/image/mypic.jpg')
->reorient()
->rotate(90)
->crop(100, 100, 0, 0)
->save('/path/to/image/mypic_thumb.jpg');
Este ejemplo tomaría la misma imagen y primero solucionaría cualquier problema de orientación del teléfono móvil. gire la imagen 90 grados y luego recorte el resultado en una imagen de 100x100 píxeles, comenzando en la esquina superior izquierda. El resultado se guardará como miniatura.
Nota
In order for the image class to be allowed to do any procesamiento, la carpeta que contiene los archivos de imagen debe tener escritura permisos.
Nota
Image processing can require a considerable amount of server memoria para algunas operaciones. Si experimenta errores de falta de memoria mientras procesa imágenes, es posible que deba limitar su tamaño máximo y/o ajustar los límites de memoria de PHP.
Calidad de la imagen
save()
puede tomar un parámetro adicional $calidad
para alterar la imagen resultante
calidad. Los valores varían de 0 a 100, siendo 90 el valor predeterminado del marco. Este parámetro
solo se aplica a imágenes JPEG y WEBP; de lo contrario, se ignorará:
Nota
The parameter $quality
for WebP can be used since v7.4.0.
<?php
$image->withFile('/path/to/image/mypic.jpg')
// processing methods
->save('/path/to/image/my_low_quality_pic.jpg', 10);
Nota
Higher quality will result in larger file sizes. See also https://www.php.net/manual/en/function.imagejpeg.php
Si solo estás interesado en cambiar la calidad de la imagen sin realizar ningún procesamiento. Deberá incluir el recurso de imagen o terminará con una copia exacta:
<?php
$image->withFile('/path/to/image/mypic.jpg')
->withResource()
->save('/path/to/image/my_low_quality_pic.jpg', 10);
Métodos de procesamiento
Hay siete métodos de procesamiento disponibles:
$imagen->recortar()
$imagen->convertir()
$imagen->ajustar()
$imagen->aplanar()
$imagen->flip()
$imagen->redimensionar()
$imagen->rotar()
$imagen->texto()
Estos métodos devuelven la instancia de clase para que puedan encadenarse, como se muestra arriba.
Si fallan, lanzarán una Higgs\Images\ImageException
que contiene
el mensaje de error. Una buena práctica es detectar las excepciones, mostrando una
error tras falla, así:
<?php
$image = \Config\Services::image();
try {
$image->withFile('/path/to/image/mypic.jpg')
->fit(100, 100, 'center')
->save('/path/to/image/mypic_thumb.jpg');
} catch (\Higgs\Images\Exceptions\ImageException $e) {
echo $e->getMessage();
}
Recortar imágenes
Las imágenes se pueden recortar para que solo quede una parte de la imagen original. Esto se utiliza a menudo al crear
imágenes en miniatura que deben coincidir con un determinado tamaño/relación de aspecto. Esto se maneja con el método crop()
:
crop(int $ancho = nulo, int $alto = nulo, int $x = nulo, int $y = nulo, bool $maintainRatio = false, cadena $masterDim = 'auto')
$width
es el ancho deseado de la imagen resultante, en píxeles.$height
es la altura deseada de la imagen resultante, en píxeles.$x
es el número de píxeles del lado izquierdo de la imagen para comenzar a recortar.$y
es el número de píxeles desde la parte superior de la imagen para comenzar a recortar.$maintainRatio
, si es verdadero, ajustará las dimensiones finales según sea necesario para mantener la relación de aspecto original de la imagen.$masterDim
especifica qué dimensión debe dejarse intacta cuando$maintainRatio
es verdadero. Los valores pueden ser:'ancho'
,'alto'
o'auto'
.
Para sacar un cuadrado de 50x50 píxeles del centro de una imagen, primero deberá calcular las x e y apropiadas. valores de compensación:
<?php
$info = \Config\Services::image('imagick')
->withFile('/path/to/image/mypic.jpg')
->getFile()
->getProperties(true);
$xOffset = ($info['width'] / 2) - 25;
$yOffset = ($info['height'] / 2) - 25;
\Config\Services::image('imagick')
->withFile('/path/to/image/mypic.jpg')
->crop(50, 50, $xOffset, $yOffset)
->save('/path/to/new/image.jpg');
Convertir imágenes
El método convert()
cambia el indicador interno de la biblioteca para el formato de archivo deseado. Esto no toca el recurso de imagen real, pero indica a save()
qué formato usar:
convertir(int $tipoimagen)
$imageType
es una de las constantes de tipo de imagen de PHP (ver por ejemplo https://www.php.net/manual/en/function.image-type-to-mime-type.php):<?php \Config\Services::image() ->withFile('/path/to/image/mypic.jpg') ->convert(IMAGETYPE_PNG) ->save('/path/to/new/image.png');
Nota
ImageMagick already saves files in the type
indicado por su extensión, ignorando $imageType
.
Imágenes de ajuste
El método fit()
tiene como objetivo ayudar a simplificar el recorte de una parte de una imagen de una manera «inteligente», siguiendo los siguientes pasos:
Determine la parte correcta de la imagen original para recortar para mantener la relación de aspecto deseada.
Recortar la imagen original.
Cambiar el tamaño a las dimensiones finales.
ajuste(int $ancho, int $alto = nulo, cadena $posición = 'centro')
$width
es el ancho final deseado de la imagen.$height
es la altura final deseada de la imagen.$position
determina la parte de la imagen que se recortará. Posiciones permitidas:'arriba-izquierda'
,'arriba'
,'arriba-derecha'
,'izquierda'
,'centro'
,' derecha'
,'abajo-izquierda'
,'abajo'
,'abajo-derecha'
.
Esto proporciona una forma mucho más sencilla de recortar que siempre mantendrá la relación de aspecto:
<?php
\Config\Services::image('imagick')
->withFile('/path/to/image/mypic.jpg')
->fit(100, 150, 'left')
->save('/path/to/new/image.jpg');
Aplanamiento de imágenes
El método aplanar()
tiene como objetivo agregar un color de fondo detrás de imágenes transparentes (PNG) y convertir píxeles RGBA en píxeles RGB.
Especifique un color de fondo al convertir de imágenes transparentes a jpg.
aplanar(int $rojo = 255, int $verde = 255, int $azul = 255)
$red
es el valor rojo del fondo.$green
es el valor verde del fondo.$blue
es el valor azul del fondo.
<?php
\Config\Services::image('imagick')
->withFile('/path/to/image/mypic.png')
->flatten()
->save('/path/to/new/image.jpg');
\Config\Services::image('imagick')
->withFile('/path/to/image/mypic.png')
->flatten(25, 25, 112)
->save('/path/to/new/image.jpg');
Voltear imágenes
Las imágenes se pueden voltear a lo largo de su eje horizontal o vertical:
voltear(cadena $dir)
$dir
especifica el eje a lo largo del cual voltear. Puede ser'vertical'
u'horizontal'
.
<?php
\Config\Services::image('imagick')
->withFile('/path/to/image/mypic.jpg')
->flip('horizontal')
->save('/path/to/new/image.jpg');
Cambiar el tamaño de las imágenes
Se puede cambiar el tamaño de las imágenes para que se ajusten a cualquier dimensión que necesite con el método resize()
:
cambiar tamaño(int $ancho, int $alto, bool $maintainRatio = false, cadena $masterDim = 'automático')
$width
es el ancho deseado de la nueva imagen en píxeles$height
es la altura deseada de la nueva imagen en píxeles$maintainRatio
determina si la imagen se estira para ajustarse a las nuevas dimensiones o si se mantiene la relación de aspecto original.$masterDim
especifica qué eje debe tener su dimensión respetada al mantener la relación. Ya sea'ancho'
,'alto'
.
Al cambiar el tamaño de las imágenes, puede elegir si desea mantener la proporción de la imagen original o estirar/aplastar la nueva.
imagen para que se ajuste a las dimensiones deseadas. Si $maintainRatio
es verdadero, la dimensión especificada por $masterDim
permanecerá igual,
mientras que la otra dimensión se modificará para que coincida con la relación de aspecto de la imagen original.
<?php
\Config\Services::image('imagick')
->withFile('/path/to/image/mypic.jpg')
->resize(200, 100, true, 'height')
->save('/path/to/new/image.jpg');
Imágenes giratorias
El método rotate()
le permite rotar una imagen en incrementos de 90 grados:
rotar(flotar $ángulo)
$angle
es el número de grados a rotar. Uno de90
,180
,270
.
Nota
While the $angle
parameter accepts a float, it will convert it to an integer during the process.
Si el valor es distinto de los tres valores enumerados anteriormente, generará una excepción HiggsImagesImageException.
Agregar una marca de agua de texto
Puedes superponer una marca de agua de texto a la imagen de forma muy sencilla con el método text()
. Esto es útil para colocar derechos de autor.
avisos, nombres de fotógrafos o simplemente marcar las imágenes como vista previa para que no se utilicen en la versión final de otras personas.
productos.
texto(cadena $texto,matriz $opciones = [])
El primer parámetro es la cadena de texto que desea mostrar. El segundo parámetro es una serie de opciones. que le permiten especificar cómo se debe mostrar el texto:
<?php
\Config\Services::image('imagick')
->withFile('/path/to/image/mypic.jpg')
->text('Copyright 2017 My Photo Co', [
'color' => '#fff',
'opacity' => 0.5,
'withShadow' => true,
'hAlign' => 'center',
'vAlign' => 'bottom',
'fontSize' => 20,
])
->save('/path/to/new/image.jpg');
Las posibles opciones que se reconocen son las siguientes:
color
Color del texto (número hexadecimal), es decir, #ff0000opacidad
Un número entre 0 y 1 que representa la opacidad del texto.withShadow
Valor booleano para mostrar una sombra o no.shadowColor
Color de la sombra (número hexadecimal)shadowOffset
Cuántos píxeles compensar la sombra. Se aplica tanto a los valores verticales como a los horizontales.hAlign
Alineación horizontal: izquierda, centro, derechavAlign
Alineación vertical: superior, media, inferiorhOffset
Desplazamiento adicional en el eje x, en píxelesvOffset
Desplazamiento adicional en el eje y, en píxelesfontPath
La ruta completa del servidor a la fuente TTF que desea utilizar. Se utilizará la fuente del sistema si no se proporciona ninguna.fontSize
El tamaño de fuente a utilizar. Cuando se utiliza el controlador GD con la fuente del sistema, los valores válidos están entre 1 y 5.
Nota
The ImageMagick driver does not recognize full server path for fontPath. Instead, simply provide the nombre de una de las fuentes del sistema instaladas que desea utilizar, es decir, Calibri.