GraphicsMagick无法处理Unicode文件名
我发现GraphicsMagick无法处理我的中文文件。 我在ImageMagick上做了同样的testing,但IM按预期工作。
我认为这可能是一个错误,所以我在这里提交了一个错误报告: https : //sourceforge.net/p/graphicsmagick/bugs/384/
无论如何,这是如何重现我的情况:
- 平台:Win10
- 版本:GraphicsMagick 1.3.20
- 代码:
gm -identify 獅藝學會.jpg
这是从命令提示符返回的文本:
>gm -identify 獅藝學會.jpg gm identify: Unable to open file (????.jpg) [Invalid argument]. gm identify: Request did not return an image.
使用IM工作:
identify 獅藝學會.jpg ç?.è-?å-,æoƒ.jpg JPEG 3264x2448 3264x2448+0+0 8-bit sRGB 2.691MB 0.016u 0:00.004
虽然返回的文本是混乱的,但是将文件转换为.png
仍然保持相同的文件名,除了不同的扩展名。
发生了什么
我发现这个问题通过使用gm node.js库批处理我的图像,调用的来源是从UTF-8网页,所以我假设文件名是作为Unicode编码传递 。
我发现没有任何与此问题有关的文档,虽然文档指出有一个-encoding
选项,它不能在Windows上作为参数发送,因为它不能识别它,我无法在Google上find相关的解决scheme。
请帮忙,有没有简单的方法解决这个问题,同时保持确切的文件名?
如果有人使用C API。 (你只能给( char *
)types的文件名。如果在Windows上使用GraphicsMagick, UTF-8
编码不起作用。)
你可以做到以下几点:
打开文件input(或输出)自己(使用fopen()
, _wfopen()
等)。
然后分别在ImageInfo
结构中设置文件句柄来读取和写入Image
结构(而不是设置文件名)。
要让GraphicsMagick生成正确的输出文件格式,请在Image
结构中设置magick
。
FE:
//Reading imageInfo->file=_wfopen(input_filename,L"rb"); //ImageInfo *imageInfo; ReadImage(imageInfo,exception); //Writing image->file=_wfopen(output_filename,L"wb"); //Image *image; strcpy(image->magick,"PNG"); WriteImage(imageInfo,image);
GraphicsMagick在写入/读取后自动closures文件。
我在C++
使用GM有同样的问题。 在Windows下不支持UTF-8文件名(即使在API中也不支持)。
我的解决方法是获取短path名(8.3),您可以使用命令行和Win32 。 然而,这不能100%的工作 – 如果你想保存一个文件,你必须首先创build一个空的名称才能获得短名称。