Преобразование tiff в jpg в php?

У меня есть сервер, на котором хранятся TIFF-изображения. Большинство клиентов могут читать и отображать TIFF-изображения, поэтому проблем нет. Однако некоторые клиенты не могут обрабатывать этот формат, но могут обрабатывать JPG. Я подумал о том, чтобы использовать библиотеку GD в PHP для преобразования на стороне сервера для клиентов без возможностей чтения TIFF. Но я заметил, что GD также не может читать файлы TIFF.

Imagick не работает в 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, некоторые программы могут его не заметить.

ELSE

Используйте расширение «imagick» PECL

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

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

В зависимости от источников и мест назначения (файлы? Urls? Http-ответ?) Вы сделаете что-то вроде:

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

ИЛИ

 $image->writeImage('something.png'); 

Я решил это с помощью «convert» и ImageMagick, вместо того, чтобы устанавливать его как DLL. На самом деле это было лучшее решение, потому что оно решило проблему для PDF-файлов. Поэтому я просто использую:

 $command = "convert ".$filename."[0] ".$destination; exec($command); 

[0] существует для PDF-файлов, поэтому он всегда будет занимать первую страницу, но он работает так же, как и для TIFF.

Теперь вам нужно только «конвертировать» на вашу Windows-машину, и вышеприведенный PHP будет работать для обоих. Поэтому просто установите это .