在論壇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的,有些程序可能不會注意到它。
ELSE
使用 「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;
OR
$image->writeImage('something.png');
看看Image Magick –
你不應該使用TIFF文件進行網頁顯示,他們不會使用任何形式的壓縮,所以只會導致你的用戶不得不下載額外的字節(並且顯然會導致你的問題與一些客戶端瀏覽器)。 –
@MikeBrant誰說他們在web上下文中使用它們?僅僅因爲正在使用http服務器並不意味着他們在網站上。如果他們正在與需要TIFF文件的供應商合作,而他們恰好正在通過http傳輸它們呢? –