Trong diễn đàn tại http://www.php.net/gd những nhận xét sau đây được viết:
IE không hiển thị các tập tin TIFF và phân phối PHP chuẩn không hỗ trợ chuyển đổi sang/từ TIFF.
ImageMagick (http://www.imagemagick.org/script/index.php) là phần mềm miễn phí có thể đọc, chuyển đổi và ghi hình ảnh ở nhiều định dạng khác nhau. Đối với người dùng Windows, nó bao gồm một phần mở rộng PHP php_magickwand_st.dll (và có, nó chạy dưới PHP 5.0.4).
Khi chuyển đổi từ TIFF sang JPEG, bạn cũng phải chuyển đổi từ không gian màu CMYK sang không gian màu RGB vì IE không thể hiển thị JPG của CMYK. Xin lưu ý: file -TIFF có RGB hoặc màu CMYK không gian file -JPEG có RGB hoặc CMYK không gian màu
Dưới đây là chức năng ví dụ sử dụng ImageMagick mở rộng: - chuyển đổi TIFF sang các định dạng tập tin JPEG - chuyển đổi CMIK để RGB màu không gian - set độ phân giải hình ảnh 300 DPIs (không thay đổi kích thước hình ảnh bằng pixel)
<?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 />";
?>
Lưu ý - Mặc dù ImageMagick đặt một cách chính xác JPEG độ phân giải file đến 300 Sở KHĐT, một số chương trình có thể không nhận thấy nó.
ELSE
Sử dụng "imagick" mở rộng PECL
http://pecl.php.net/package/imagick
http://php.net/manual/en/book.imagick.php
Tùy thuộc vào nguồn và điểm đến (file? Url? Http phản ứng?), Bạn sẽ làm một cái gì đó như:
$image = new Imagick('something.tiff');
$image->setImageFormat('png');
echo $image;
HOẶC
$image->writeImage('something.png');
Hãy xem hình ảnh Magick –
Bạn không nên sử dụng các tệp TIFF để hiển thị trên web mà chúng không có bất kỳ loại nén nào khiến người dùng của bạn phải tải xuống thêm byte (và rõ ràng là gây ra sự cố cho bạn) với một số trình duyệt của khách hàng). –
@MikeBrant Ai nói rằng họ đang sử dụng chúng trong ngữ cảnh web? Chỉ vì một máy chủ http đang được sử dụng không có nghĩa là chúng đang ở trên một trang web. Điều gì sẽ xảy ra nếu họ đang làm việc với các nhà cung cấp cần tệp TIFF và họ chỉ tình cờ chuyển chúng qua http? –