Gerardo, parte de nuestro staff, nos ha hecho el favor de escribir esta crónica porque controla muy bien dicho tema.
Solución:
En el foro de http://www.php.net/gd se escribe el siguiente comentario:
IE no muestra archivos TIFF y la distribución estándar de PHP no admite la conversión a / desde TIFF.
ImageMagick (http://www.imagemagick.org/script/index.php) es un software gratuito que puede leer, convertir y escribir imágenes en una gran variedad de formatos. Para los usuarios de Windows, incluye una extensión PHP php_magickwand_st.dll (y sí, se ejecuta bajo PHP 5.0.4).
Al convertir de TIFF a JPEG, también debe convertir de espacio de color CMYK a espacio de color RGB, ya que IE tampoco puede mostrar JPG CMYK. Tenga en cuenta: -Los archivos TIFF pueden tener un espacio de color RGB o CMYK -Los archivos JPEG pueden tener un espacio de color RGB o CMYK
Aquí hay funciones de ejemplo que usan la extensión ImageMagick: – convertir formatos de archivo TIFF a JPEG – convertir CMIK a espacio de color RGB – establecer la resolución de la imagen en 300 DPI (no cambia el tamaño de la imagen en píxeles)
";
MagickSetImageColorspace($mgck_wnd, MW_RGBColorspace);
MagickWriteImage($mgck_wnd, str_replace('.', '-rgb.', $file));
function tiff2jpg($file)
$mgck_wnd = NewMagickWand();
MagickReadImage($mgck_wnd, $file);
$img_colspc = MagickGetImageColorspace($mgck_wnd);
if ($img_colspc == MW_CMYKColorspace)
echo "$file was in CMYK format
";
MagickSetImageColorspace($mgck_wnd, MW_RGBColorspace);
MagickSetImageFormat($mgck_wnd, 'JPG' );
MagickWriteImage($mgck_wnd, str_replace('.tif', '.jpg', $file));
function to300dpi($file)
$mgck_wnd = NewMagickWand();
MagickReadImage($mgck_wnd, $file);
$img_units = MagickGetImageUnits($mgck_wnd);
switch ($img_units)
case MW_UndefinedResolution: $units= 'undefined'; break;
case MW_PixelsPerInchResolution: $units= 'PPI'; break;
case MW_PixelsPerCentimeterResolution: $units= 'PPcm'; break;
list($x_res, $y_res) = MagickGetImageResolution($mgck_wnd);
echo "$file
x_res=$x_res $units - y_res=$y_res $units
";
if($x_res == 300 && $y_res == 300 && $img_units == MW_PixelsPerInchResolution) return;
MagickSetImageResolution($mgck_wnd, 300 , 300);
MagickSetImageUnits($mgck_wnd, MW_PixelsPerInchResolution);
MagickWriteImage($mgck_wnd, str_replace('.', '-300.', $file));
$file='photos/test-cmyk.tif';
//this is a TIFF file in CMYK format with a 96 DPI resolution
cmyk2rgb($file);
$file = str_replace('.', '-rgb.', $file);
to300dpi($file);
$file = str_replace('.', '-300.', $file);
tiff2jpg($file);
$file = str_replace('.tif', '.jpg', $file);
to300dpi($file);
/* no file name changes as ImageMagick reports 300 DPIs
$file = str_replace('.', '-300.', $file);
*/
list($width, $height, $type, $attr) = getimagesize($file);
$width = $width/3;
$height = $height/3;
echo "
";
echo "
$file => width=$width - height=$height - type=$type - attr=$attr
";
$file='photos/test-rgb.tif';
//this is a TIFF file in RGB format with a 96 DPI resolution
cmyk2rgb($file);
$file = str_replace('.', '-rgb.', $file);
to300dpi($file);
$file = str_replace('.', '-300.', $file);
tiff2jpg($file);
$file = str_replace('.tif', '.jpg', $file);
to300dpi($file);
/* no file name changes as ImageMagick reports 300 DPIs
$file = str_replace('.', '-300.', $file);
*/
list($width, $height, $type, $attr) = getimagesize($file);
$width = $width/3;
$height = $height/3;
echo "";
echo "
$file => width=$width - height=$height - type=$type - attr=$attr
";
?>
Nota: aunque ImageMagick establece correctamente la resolución de los archivos JPEG en 300 DPI, es posible que algunos programas no lo noten.
DEMÁS
Utilice la extensión PECL “imagick”
http://pecl.php.net/package/imagick
http://php.net/manual/en/book.imagick.php
Dependiendo de las fuentes y destinos (¿archivos ?, ¿URL ?, ¿respuesta http?), Harás algo como:
$image = new Imagick('something.tiff');
$image->setImageFormat('png');
echo $image;
O
$image->writeImage('something.png');
Resolví esto usando “convert” e ImageMagick, en lugar de tener que instalarlo como una DLL. En realidad, fue la mejor decisión de la historia, porque también resolvió el problema de los archivos PDF. Así que simplemente uso:
$command = "convert ".$filename."[0] ".$destination;
exec($command);
El [0] está ahí para archivos PDF, por lo que siempre ocupará la primera página, pero también funciona como está para TIFF.
Todo lo que necesita ahora es tener ‘convertir’ en su máquina Windows y el PHP anterior funcionará para ambos. Así que simplemente instale esto.