instalar - php extension imagick
Obtener/configurar DPI con PHP GD/Imagick? (3)
Estoy construyendo una aplicación web que manejará los archivos de imagen que finalmente se imprimirán, en gran formato.
Como parte de esto, necesito obtener (es decir, leer) y configurar (es decir, cambiar) el DPI de un archivo de imagen.
¿Es esto posible a través de PHP GD o PHP Imagick?
Gracias,
BK
Editar:
Se puede acceder al DPI de una imagen a través del método getImageResolution
de iMagick:
public function getDPI() {
$imgDPI = $this->image->getImageResolution();
return $imgDPI;
}
y el DPI de una imagen se puede establecer a través del método setImageResolution de setImageResolution
:
public function setDPI($DPIX, $DPIY) {
$this->image->setImageResolution($DPIX,$DPIY);
}
En un formato de mapa de bits primitivo como los que genera GD, la configuración de dpi es simplemente una metainformación que la aplicación de procesamiento puede usar para convertir el tamaño de píxel en una unidad física.
Hasta donde yo sé, no es posible manipular metadatos directamente en GD. Tendría que usar una biblioteca externa para eso.
Dicho eso, no creo que sea realmente necesario. Simplemente genere la imagen en cualquier dimensión de píxel que necesite (¡el número de píxeles es la información realmente relevante!) E indique al proceso de impresión qué configuración de ppp utilizar.
Esta es mi solución de trabajo en Joox.io
/**
* @param $filename
* @return array
*/
function getImageDPI($filename)
{
$resolutions = null;
if (class_exists(''Imagick'')) {
$image = new Imagick($filename);
$resolutions = $image->getImageResolution();
} else {
$a = fopen($filename, ''r'');
$string = fread($a, 20);
fclose($a);
$data = bin2hex(substr($string, 14, 4));
$x = substr($data, 0, 4);
$y = substr($data, 4, 4);
$resolutions = array(''x'' => hexdec($x), ''y'' => hexdec($y));
}
return $resolutions;
}
para usar "getImageResolution ();" debe estar seguro de que la resolución en "PixelsPerInch" ... a veces puede ser "PixelsPerCentimeter"
use el siguiente código para obtener información de la imagen:
$imagick = new Imagick($filename);
$data = $imagick->identifyimage();
var_dump($data);
resultado (cuando PixelsPerInch):
array(11) {
["imageName"]=> string(11) "/jpg300.jpg"
["format"]=> string(51) "JPEG (Joint Photographic Experts Group JFIF format)"
["units"]=> string(13) "PixelsPerInch"
["type"]=> string(9) "TrueColor"
["colorSpace"]=> string(3) "RGB"
["compression"] => string(4) "JPEG"
["fileSize"] => string(6) "8.72mb"
["mimetype"] => string(10) "image/jpeg"
["geometry"] => array(2) {
["width"] => int(11812)
["height"] => int(7876)
}
["resolution"]=> array(2) {
["x"]=> float(300)
["y"]=> float(300)
}
["signature"]=> string(64) "7fc387ea465ec716e9fd6e233bb1d3740cb509f5667ed2a4df0199e6e664590e"
}
o (cuando PixelsPerCentimeter):
array(11) {
["imageName"]=> string(8) "/psm.jpg"
["format"]=> string(51) "JPEG (Joint Photographic Experts Group JFIF format)"
["units"]=> string(19) "PixelsPerCentimeter"
["type"]=> string(9) "TrueColor"
["colorSpace"]=> string(3) "RGB"
["compression"]=> string(4) "JPEG"
["fileSize"]=> string(7) "25.01mb"
["mimetype"]=> string(10) "image/jpeg"
["geometry"]=>
array(2) {
["width"]=> int(11812)
["height"]=> int(7876)
}
["resolution"]=>
array(2) {
["x"]=> float(118.11)
["y"]=> float(118.11)
}
["signature"]=> string(64) "b491e059624e79a4dee62d9cc7646019927b2222bfed9ac8dd4342185e648eaf"
}