无法在ImageMagick中创建缩略图:“转换:此图像格式无解码委托”

时间:2013-10-12 23:23:30

标签: imagemagick mediawiki

我整天都在这。我正在尝试将图像上传到Mediawiki,这是我在ImageMagick尝试创建缩略图时遇到的错误:

Error creating thumbnail: convert: no decode delegate for this image format `/tmp/magick-11924QG1rRXzT948I' @ error/constitute.c/ReadImage/552.
convert: no images defined `/tmp/s3thumb-cripEh' @ error/convert.c/ConvertImageCommand/3127.

我为mediawiki设置了一个调试文件,这就是我在日志中得到的内容:

BitmapHandler::doTransform: creating 112x120 thumbnail at /tmp/s3thumb-cripEh using scaler im
BitmapHandler::doTransform: called wfMkdirParents(/tmp)
BitmapHandler::getMagickVersion: Running convert -version
wfShellExec: /bin/bash '/var/www/mediawiki-1.21.2/includes/limit.sh' ''\''/usr/local/bin/convert'\'' -version' 'MW_CPU_LIMIT=180; MW_CGROUP='\'''\''; MW_MEM_LIMIT=202400; MW_FILE_SIZE_LIMIT=102400; MW_WALL_CLOCK_LIMIT=180'
BitmapHandler::transformImageMagick: running ImageMagick: '/usr/local/bin/convert' -quality 80 -background white -define jpeg:size=112x120 ''  -thumbnail '112x120!' -depth 8 -sharpen '0x0.4'  -rotate -0   '/tmp/s3thumb-cripEh' 2>&1
wfShellExec: /bin/bash '/var/www/mediawiki-1.21.2/includes/limit.sh' 'OMP_NUM_THREADS='\''1'\'' '\''/usr/local/bin/convert'\'' -quality 80 -background white -define jpeg:size=112x120 '\'''\''  -thumbnail '\''112x120!'\'' -depth 8 -sharpen '\''0x0.4'\''  -rotate -0   '\''/tmp/s3thumb-cripEh'\'' 2>&1' 'MW_CPU_LIMIT=180; MW_CGROUP='\'''\''; MW_MEM_LIMIT=202400; MW_FILE_SIZE_LIMIT=102400; MW_WALL_CLOCK_LIMIT=180'
[thumbnail] thumbnail failed on ip-10-168-26-167: error 1 "convert: no decode delegate for this image format `/tmp/magick-11924QG1rRXzT948I' @ error/constitute.c/ReadImage/552.
convert: no images defined `/tmp/s3thumb-cripEh' @ error/convert.c/ConvertImageCommand/3127." from "'/usr/local/bin/convert' -quality 80 -background white -define jpeg:size=112x120 ''  -thumbnail '112x120!' -depth 8 -sharpen '0x0.4'  -rotate -0   '/tmp/s3thumb-cripEh' 2>&1"
LocalS3File::transform thumb:
LocalS3File::transform thumbTempPath: /tmp/s3thumb-cripEh, dest: wiki-images/thumb/1/19/5ovrDaU.jpg/112px-5ovrDaU.jpg
info:1
LocalS3File::transform return thumb: MediaTransformError Object
(
    [htmlMsg] => Error creating thumbnail: convert: no decode delegate for this image format `/tmp/magick-11924QG1rRXzT948I' @ error/constitute.c/ReadImage/552.<br />
convert: no images defined `/tmp/s3thumb-cripEh' @ error/convert.c/ConvertImageCommand/3127.<br />

    [textMsg] => Error creating thumbnail: convert: no decode delegate for this image format `/tmp/magick-11924QG1rRXzT948I' @ error/constitute.c/ReadImage/552.<br />
convert: no images defined `/tmp/s3thumb-cripEh' @ error/convert.c/ConvertImageCommand/3127.<br />

    [width] => 112
    [height] => 120
    [url] =>
    [path] =>
    [file] =>
    [page] =>
    [responsiveUrls] => Array
        (
        )

    [storagePath:protected] =>
)

从命令行尝试,从日志中复制粘贴命令(但使用了测试文件):

convert -quality 80 -background white -define jpeg:size=112x120 '' -thumbnail '112x120!' -depth 8 -sharpen '0x0.4' -rotate -0 'logo.jpg

但是这个过程很糟糕。如果我跑:

sudo convert logo.png -quality 80 -background white -define jpeg:size=112x120  -thumbnail '112x120!' -depth 8 -sharpen '0x0.4'  -rotate -0 logo.jpg

有效。

如果我查看代表,我有:

DELEGATES      jng jp2 jpeg png ps tiff xml zlib

我尝试将媒体wiki上的默认内存增加到

$wgMaxShellMemory = 202400;

我觉得我尝试过任何事情。有什么想法吗?

修改 这是我到目前为止所发现的:

我非常确定shell没有执行ImageMagick命令,因为反斜杠的反斜杠:

wfShellExec: /bin/bash '/var/www/mediawiki-1.21.2/includes/limit.sh' ''\''/usr/local/bin/convert'\'' -version' 'MW_CPU_LIMIT=180; MW_CGROUP='\'''\''; MW_MEM_LIMIT=202400; MW_FILE_SIZE_LIMIT=102400; MW_WALL_CLOCK_LIMIT=180'

那些''\''导致命令无法运行,因此导致"no decode"错误。它无法解码,因为文件不存在。我已跟踪wfShellEecGlobalFunctions.php。 wfShellExec函数位于我文件的第2778行附近。

if ( php_uname( 's' ) == 'Linux' )区块中有:

escapeshellarg( $cmd )

我删除了escapeshellarg()功能,只是自己离开了$cmd

再次尝试上传,错误消失,文件被创建,但现在缩略图文件是0字节。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

在下文中,空字符串参数''表示应该是输入图像:

convert -quality 80 -background white -define jpeg:size=112x120 '' -thumbnail '112x120!' -depth 8 -sharpen '0x0.4' -rotate -0 'logo.jpg'

当您从命令行运行sudo convert logo.png ...时,它有效,因为您有输入图像(logo.png),但在MW内部缺少源图像参数。所以问题不在于convert,ImageMagick自然无法转换不存在的图像。问题是MW无法提供源图像文件名。

如果您的情况与我的情况类似,则空的''图像源参数可以追溯到images目录中的权限。确保此目录及其所有子目录都是服务器进程的rwx。一旦我打开了这个目录中的所有内容到服务器,错误消失了,图像和缩略图显得很完美。