2017-01-21 29 views
1

Я не смог найти способ преобразования массива байтов TIFF в массив байтов JPEG в PHP. Я пробовал следующее:Преобразование массива байтов TIFF в массив байтов JPEG в PHP

$im = imagecreatefromstring("49 49 2a 00 16 1d 00 00 80 3f e0 4f f0 04 16 0d II.........O....07 84 42 61 50 b8 64 36 1d 0f 88 44 62 51 38 a4 ..BaP.d6...DbQ8.56 2d 17 8c 46 63 51 b8 e4 76 3d 1f 90 48 64 52 V...FcQ..v...HdR 
39 24 96 4d 27 94 4a 65 52 b9 64 b6 5d 2f 90 c0 9..M..JeR.d....."); 

но он возвращает Data is not recognized format.

Как мне преобразовать байты TIFF в байты JPEG?

+0

Как вы получаете «байтовый массив»? –

+0

Я использую метод вызова wsdl SoapClient(). –

+0

Является ли это шестнадцатеричной последовательностью байтов, разделенных пробелами? Интересно, что означают символы 'II',' M', 'JeR'. –

ответ

2

Расширение GD в настоящее время не поддерживает загрузку изображений TIFF. Вы можете использовать Imagick расширение вместо:

try { 
    $im = new Imagick(); 
    $im->readImageBlob($tiff_bytes); 
    $im->setFormat('JPEG'); 
    file_put_contents('test.jpeg', $im->getImageBlob()); 
} catch (Exception $e) { 
    trigger_error($e->getMessage(), E_USER_ERROR); 
} 

В приведенном выше коде, $tiff_bytes двоичная строка из TIFF изображения.

В качестве альтернативы, вы можете установить official command line tools, сохранить TIFF изображения в файловой системе, и преобразовать его в JPEG с помощью следующей команды:

convert file.jpg file.tiff 

Существует целый ряд способов, чтобы выполнить команду оболочки в PHP. Я предпочитаю exec() для случаев, когда мне не требуется большая часть контроля над выполнением, и proc_open(), когда мне нужен полный контроль над содержимым файловых дескрипторов, то есть в большинстве случаев.

+0

Я пытаюсь использовать вышеприведенный код, но я получаю ошибку: - Неустранимая ошибка: класс «Imagick» не найден. Я также зарегистрировал файл php_imagick.dll в php.ini –

+1

@SoftwareEngineer, расширение по какой-то причине не загружается. Посмотрите на вывод 'phpinfo();', если вы используете веб-SAPI или на выходе 'php -m' (список загруженных модулей) в CLI. Вы установили (http://php.net/manual/en/imagick.installation.php) расширение PECL? Является ли библиотека присутствующей в каталоге расширений ('extension_dir' в _php.ini_)? –

+1

Вам необходимо установить модуль Imagick, если он еще не установлен. После установки перезапустите PHP и он будет существовать :) – Martin