在PHP中将tiff转换为jpg?

我有一台存放TIFF图像的服务器.大多数客户可以读取和显示TIFF图像,因此没有问题.但是,有些客户端无法处理此格式但可以处理JPG.
我想过使用PHP的GD库为没有TIFF读取能力的客户端进行服务器端转换.但我注意到GD也无法读取TIFF文件.

想象不在windows中工作,我的想法是创建一个imageFetcher.php,它将客户想要的实际图像作为参数.它检查客户端的类型,如果需要,转换图像并输出JPG,否则只输出TIFF.

有没有人知道我怎么做这样的事情?

提前致谢.

解决方法:

http://www.php.net/gd论坛上写下如下评论:

IE不显示TIFF文件,标准PHP发行版不支持转换为/从TIFF转换.

ImageMagick(http://www.imagemagick.org/script/index.php)是一款免费软件,可以以多种格式读取,转换和写入图像.对于Windows用户,它包含PHP扩展php_magickwand_st.dll(是的,它在PHP 5.0.4下运行).

从TIFF转换为JPEG时,您还必须从CMYK颜色空间转换为RGB颜色空间,因为IE也无法显示CMYK JPG.请注意:
-TIFF文件可能具有RGB或CMYK颜色空间
-JPEG文件可能具有RGB或CMYK颜色空间

以下是使用ImageMagick扩展的示例函数:
– 将TIFF转换为JPEG文件格式
– 将CMIK转换为RGB色彩空间
– 将图像分辨率设置为300 DPI(不会更改图像大小,以像素为单位)

<?php

function cmyk2rgb($file) {
    $mgck_wnd = NewMagickWand();
    MagickReadImage($mgck_wnd, $file);

    $img_colspc = MagickGetImageColorspace($mgck_wnd);
    if ($img_colspc == MW_CMYKColorspace) {
        echo "$file was in CMYK format<br />";
        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<br />";
        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<br /> x_res=$x_res $units - y_res=$y_res $units<br />";
    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 "<img src=\"http://localhost/$file\" width=\"$width\" height=\"$height\" alt=\"getimagesize() example\" />";
echo "<br />$file => width=$width - height=$height - type=$type - attr=$attr<br /><br />";

$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 "<img src=\"http://localhost/$file\" width=\"$width\" height=\"$height\" alt=\"getimagesize() example\" />";
echo "<br />$file => width=$width - height=$height - type=$type - attr=$attr<br /><br />";

?>

注 – 尽管ImageMagick正确地将JPEG文件分辨率设置为300 DPI,但某些程序可能不会注意到它.

其他

使用“imagick”PECL扩展

http://pecl.php.net/package/imagick

http://php.net/manual/en/book.imagick.php

根据来源和目的地(文件?网址?http响应?),您可以执行以下操作:

 $image = new Imagick('something.tiff');
    $image->setImageFormat('png');
    echo $image;

要么

$image->writeImage('something.png');
上一篇:php – 通过电子邮件发送动态创建的图像


下一篇:php – 图像缓存不会显示新编辑的图像