【问题标题】:Converting TIFF byte array into JPEG byte array in PHP在 PHP 中将 TIFF 字节数组转换为 JPEG 字节数组
【发布时间】:2017-01-21 04:21:00
【问题描述】:

我找不到在 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.....");

但它返回Data is not recognized format

那么如何将 TIFF 字节转换为 JPEG 字节呢?

【问题讨论】:

  • 如何得到“字节数组”?
  • 我正在使用调用 wsdl SoapClient() 方法。
  • 它是十六进制编码的空格分隔字节序列吗?我想知道字符IIMJeR 是什么意思。
  • 我尝试放入二进制数据,但这是不可能的。所以只是它的例子
  • @Ruslan 是否可以将二进制图像值存储为本地文件夹中的 jpeg 图像?请帮助先生

标签: php jpeg gd tiff


【解决方案1】:

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() 当我需要完全控制文件描述符的内容时,即在大多数情况下。

【讨论】:

  • 我尝试使用上述代码,但出现错误:- 致命错误:未找到“Imagick”类。我还在 php.ini 中注册了 php_imagick.dll 文件
  • @SoftwareEngineer,由于某种原因未加载扩展。如果您正在运行 Web SAPI,请查看phpinfo(); 的输出,或者在 CLI 中查看php -m(已加载模块列表)的输出。你有installed PECL 扩展吗?该库是否存在于扩展目录中(php.ini 中的extension_dir)?
  • 如果尚未安装 Imagick 模块,您需要安装它。安装后,重新启动 PHP,它就会存在 :)
  • @SoftwareEngineer, pecl.php.net/package/imagick 是官方页面。如果您在 Windows 上,请将 DLL 下载到 extension_dir,重新启动 Web 服务器,然后检查 <?php phpinfo(); 的输出。您可能会发现this 页面很有用
  • 我尝试下载并放入“C:\wamp64\bin\php\php5.6.25\ext”目录并添加 php.ini 文件 extension_dir 但我收到了 soapcall 错误。我也使用soapcall函数
猜你喜欢
  • 1970-01-01
  • 2015-12-27
  • 2019-11-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-02
  • 2019-12-10
相关资源
最近更新 更多