2011-11-04 12 views
10

Estoy buscando para centrar el cultivo y la imagen usando Imagick PHP apis (no la versión de línea de comando de Imagick).centro de cultivo con gravedad usando Imagick y PHP

Esencialmente quiero hacer lo que sea posible a través de la línea de comandos, usando API. Aquí hay un ejemplo a través de la línea de comandos: http://www.imagemagick.org/Usage/crop/#crop_gravity

Esto es lo que estoy haciendo (no funciona). Siempre recorta la esquina superior izquierda de la fuente:

 $this->imagickObj->setGravity(\Imagick::GRAVITY_CENTER); 
     $this->imagickObj->cropImage(300,250,0,0); 
     $this->imagickObj->setImagePage(0, 0, 0, 0); 

¿Por qué el setGravity no se aplica a la imagen antes de la cosecha? http://www.php.net/manual/en/function.imagick-setgravity.php dice que debería aplicarse al objeto (en este caso la imagen individual) ...

Respuesta

0

El tercer y cuarto argumento del objeto Imagemagick del cropImage() definen la esquina superior izquierda del recorte. Intente pasarlos como null (y use el método setGravity()), o puede que tenga que calcular dónde se supone que se producirá la cosecha y muestre esos números en el método cropImage() (y no se moleste con setGravity()).

Por lo que vale, he hecho una gran cantidad de codificación alrededor de Imagemagick usando PHP, y debido a la horrible documentación de la extensión Imagemagick, recurrí a hacer muchas llamadas de línea de comandos agradables.

+0

gracias. null, null no funciona. Puedo hacer los cálculos, pero preferiría aprovechar incorporado si es posible. Quiero evitar ir a CLI por varias razones, una de las cuales es el rendimiento (estoy escribiendo un servicio de manipulación de imágenes que se usará bastante). – rynop

+0

El servicio principal que escribí que utiliza la CLI procesa un par de miles de imágenes al día sin interrupciones, y se ejecuta en Linux con un Intel Core i5 760 con 4 GB de RAM que también sirve para un par de sitios web. – Crontab

+0

gracias. Decidí solo hacer los cálculos, ya que solo me llevó unos minutos. Voy a dejar esta pregunta abierta durante unos días para ver si alguien sabe cómo usar la gravedad incorporada. – rynop

12

Es demasiado tarde para que la persona original que hizo la pregunta, pero para los futuros visitantes, la solución correcta es

bool Imagick::cropThumbnailImage (int $width , int $height)

Perdón por la respuesta tardía, pero yo también quedé aquí hace solo 30 minutos y el primer resultado de google me redirigió aquí. Espero que no pase lo mismo con los demás.

+0

¿esto siempre centra la cosecha? ¿y si quiero cambiar la gravedad? – rynop

+0

Sí, siempre cosecha con gravedad central. En realidad, primero escala la imagen para que coincida con la altura o el ancho y luego recorta desde el centro para hacer una miniatura de cualquier imagen. Esta es la misma lógica utilizada por FB, Twitter, Google y muchos otros sitios para crear miniaturas. Si necesita cambiar la gravedad, use 'bool Imagick :: cropImage (int $ ancho, int $ alto, int $ x, int $ y)' como se define en http://php.net/manual/en/imagick. cropimage.php –