在 PHP 中将 TIFF 字节数组转换为 JPEG 字节数组
Converting TIFF byte array into JPEG byte array in PHP
我在 PHP 中找不到将 TIFF 字节数组转换为 JPEG 字节数组的方法。我尝试了以下方法:
$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.....");
但是 returns Data is not recognized format
.
那么如何将 TIFF 字节转换为 JPEG 字节?
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 中有多种方法可以执行 shell 命令。我更喜欢 exec()
用于不需要太多控制执行的情况,而 proc_open()
当我需要完全控制文件描述符的内容时,即在大多数情况下。
我在 PHP 中找不到将 TIFF 字节数组转换为 JPEG 字节数组的方法。我尝试了以下方法:
$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.....");
但是 returns Data is not recognized format
.
那么如何将 TIFF 字节转换为 JPEG 字节?
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 中有多种方法可以执行 shell 命令。我更喜欢 exec()
用于不需要太多控制执行的情况,而 proc_open()
当我需要完全控制文件描述符的内容时,即在大多数情况下。