首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Imagick PHP扩展无法输出JPEG XR图像

Imagick PHP扩展无法输出JPEG XR图像
EN

Stack Overflow用户
提问于 2017-11-14 07:16:09
回答 2查看 2.4K关注 0票数 4

我对ImageMagick有个问题。我找了很多次,但没能找到解决办法。我的问题与输出到JPEG XR格式有关。我正试图在PHP 7.0/7.1上的Windows 10Linux Debian 9服务器上完成这一任务。

我的代码:

代码语言:javascript
复制
<?php

if (TRUE !== extension_loaded('imagick')) {
    throw new Exception('Imagick extension is not loaded.');
}

$image = new Imagick();
$image->newImage(100, 100, new ImagickPixel('red'));

// $image->setImageFormat('jpg'); // <-- It works 
$image->setImageFormat('jxr'); // <-- Fatal error: Uncaught ImagickException: UnableToOpenModuleFile

header("Content-Type: image/" . $image->getImageFormat());
echo $image;

$image->destroy(); 

Windows上的结果phpinfo():

Windows应用程序:

代码语言:javascript
复制
C:\Users\Andrei>JxrDecApp.exe
JPEG XR Decoder Utility
Copyright 2013 Microsoft Corporation - All Rights Reserved
...

C:\Users\Andrei>JxrEncApp.exe
JPEG XR Encoder Utility
Copyright 2013 Microsoft Corporation - All Rights Reserved
...

JxrDecApp.exeJxrEncApp.exe可以从任何目录中获得!

Linux上的结果phpinfo():

Linux包:

代码语言:javascript
复制
root@Server:~# dpkg-query -l | grep jxr
ii  libjxr-tools                    1.1-6+b1                       amd64        JPEG-XR lib - command line apps
ii  libjxr0:amd64                   1.1-6+b1                       amd64        JPEG-XR lib - libraries
root@Server:~# dpkg-query -l | grep imagick
ii  php-imagick                     3.4.3~rc2-2                    amd64        Provides a wrapper to the ImageMagick library

root@Server:~# JxrDecApp
JPEG XR Decoder Utility
Copyright 2013 Microsoft Corporation - All Rights Reserved
...
root@Server:~# JxrEncApp
JPEG XR Encoder Utility
Copyright 2013 Microsoft Corporation - All Rights Reserved
...

Windows上的致命错误:

Uncaught : ImagickException:在第11行的D:\www\temp\jxr\index.php中没有这样的文件或目录@ warning/module.c/GetMagickModulePath/830

Linux上的致命错误:

无法设置图像格式

Wiki ImageMagick:

支持的图像格式:

JXR \ RW _将JxrDecApp和JxrEncApp应用程序放在执行路径中。读更多这个

ChangeLog:

2013-04-29 6.8.5-3 为jpeg添加DeleteImageArtifact():区段工件(感谢Jimmy谢@ Microsoft)。 添加对JXR / WDP图像格式的支持。

更新

echo $_SERVER['PATH'];到Windows:

代码语言:javascript
复制
c:\Program Files\ImageMagick-6.9.3-7-vc14-x64\bin\;C:\ProgramData\Oracle\Java\javapath;C:\Program Files (x86)\Intel\iCLS Client\;C:\Program Files\Intel\iCLS Client\;C:\Program Files\Microsoft MPI\Bin\;C:\Windows\System32;C:\Windows;C:\Windows\System32\wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files (x86)\Microsoft SQL Server\130\Tools\Binn\;C:\Program Files\Microsoft SQL Server\130\Tools\Binn\;C:\Program Files (x86)\Microsoft SQL Server\130\DTS\Binn\;C:\Program Files\Microsoft SQL Server\130\DTS\Binn\;C:\Program Files\Microsoft SQL Server\Client SDK\ODBC\130\Tools\Binn\;C:\Program Files (x86)\Microsoft SQL Server\Client SDK\ODBC\130\Tools\Binn\;C:\Program Files (x86)\Microsoft SQL Server\140\Tools\Binn\;C:\Program Files (x86)\Microsoft SQL Server\140\DTS\Binn\;C:\Program Files (x86)\Microsoft SQL Server\140\Tools\Binn\ManagementStudio\;C:\Program Files\Git\cmd;C:\Program Files (x86)\GtkSharp\2.12\bin;C:\Program Files\Java\JDK18~1.0_1\bin;C:\Program Files\JetBrains\IntelliJ IDEA 2017.2.1\plugins\maven\lib\maven3\bin;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files\nodejs\;C:\Program Files\JetBrains\IntelliJ IDEA 2017.2.1\bin\;C:\Program Files (x86)\Skype\Phone\;C:\WINDOWS\system32\config\systemprofile\AppData\Local\Microsoft\WindowsApps

dir:

代码语言:javascript
复制
C:\Users\Andrei>dir "c:\Program Files\ImageMagick-6.9.3-7-vc14-x64\bin\*jxr*"
11.11.2017  22:53           464 896 JXRDecApp.exe
11.11.2017  22:53           469 504 JXREncApp.exe

来自Linux上的echo $_SERVER['PATH'];

代码语言:javascript
复制
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

执行:

代码语言:javascript
复制
root@Server:~# which JxrEncApp
/usr/bin/JxrEncApp
root@Server:~# which JxrDecApp
/usr/bin/JxrDecApp

问题:

如何添加对JXR图像格式的支持?

EN

回答 2

Stack Overflow用户

发布于 2017-11-22 07:46:32

好消息!Imagick支持JXR或JPEG扩展范围格式,但不以您希望的方式支持。您目前如何尝试通过使用字节数组来访问它。Magick.NET (Imagick .NET库)的维护者在一个封闭的Github问题中指出了以下几点:

该格式是支持的,但你将需要做一些‘魔术’,使其工作。只有将文件JXRDecApp.exe复制到bin目录并从具有.jxr扩展名的磁盘上读取文件时,才能读取JXR文件。不支持从字节数组中读取数据。如果jxrlib项目(http://jxrlib.codeplex.com)的代码能够成为ImageMagick的一部分,那就太好了。也许我应该在ImageMagick项目中为此创建一个问题。您需要自己编译JXRDecApp.exe,因为没有可用的二进制文件。

因此,JXR格式是受支持的,但不是以您想要的方式应用它。但是,转换可以通过命令行完成,如StackOverflow 这里所描述的那样。

代码语言:javascript
复制
convert input.jpg jxr:output.jpg

剩下的就是编写一个执行此命令的脚本来为您进行转换。确保正确地保护该脚本及其输入和输出。祝好运!

来源:

票数 1
EN

Stack Overflow用户

发布于 2017-11-24 13:42:09

有些PHP包附带了自己的Imagick包,而不是使用系统包。因此,您可能会发现命令行中所支持的内容和PHP支持的内容不同。

在源代码中,PHP直接从Imagick本身获取受支持格式的列表。

如果它不是不同的版本,那么可能有一些隐藏的抽象,其中jxr是另一个父格式的别名,具有一些特定的选项。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47279769

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档