Imagemagick Magickwand转换为TIFF&;CCITT group 4压缩提供未压缩图像

Imagemagick Magickwand转换为TIFF&;CCITT group 4压缩提供未压缩图像,imagemagick,tiff,magickwand,Imagemagick,Tiff,Magickwand,尝试使用CCITT group 4压缩将24 bpp位图转换为黑白TIFF。 结果是一个预期的TIFF 1 bpp图像,但未压缩 我使用的是FreePascal,它有magickwand绑定,状态从不为MagickFalse: MagickWandGenesis; wand := NewMagickWand; try status := MagickReadImage(wand,PChar(InputFile)); if (status = MagickFalse) then Handl

尝试使用CCITT group 4压缩将24 bpp位图转换为黑白TIFF。 结果是一个预期的TIFF 1 bpp图像,但未压缩

我使用的是FreePascal,它有magickwand绑定,状态从不为MagickFalse:

MagickWandGenesis;
wand := NewMagickWand;
try
  status := MagickReadImage(wand,PChar(InputFile));
  if (status = MagickFalse) then HandleError;

  status := MagickSetImageFormat(wand,'TIFF');
  if (status = MagickFalse) then HandleError;

  // convert to black & white/lineart
  status := MagickSetImageType(wand,BilevelType);
  if (status = MagickFalse) then HandleError;

  // Group4Compression seems defined as 4 which 
  // apparently doesn't match imagemagick source. Bug:
  //http://mantis.freepascal.org/view.php?id=26723
  status := MagickSetImageCompression(wand,CompressionType(7)); //was Group4Compression
  if (status = MagickFalse) then HandleError;

  // Apparently set(image)compresionquality and
  // stripimage are necessary to actually compress
  status := MagickSetImageCompressionQuality(wand,0);
  if (status = MagickFalse) then HandleError;
  status := MagickStripImage(wand);
  if (status = MagickFalse) then HandleError;

  status := MagickWriteImage(wand,PChar(OutputFile));
  if (status = MagickFalse) then HandleError;

finally
  wand := DestroyMagickWand(wand);
end;
MagickWandTerminus;
源图像位于

原始(错误)程序源代码位于

原始(故障)输出图像位于

我做错了什么

编辑:已解决;非现场获得解决方案:FreePascal绑定中的CompressionType枚举可能已过时-Group4Compression为4(IIRC),而它应该为7


我会悬赏马克·塞切尔,因为他的回答是解决问题的必要部分。上面的源代码更新了正确的版本。

至少在PHP版本中,设置压缩类型似乎并不实际压缩图像-请参见底部的注释


它还显示了在我发现的所有示例中,您必须随后调用
MagickSetImageCompressionQuality()
StripImage()
来实际执行压缩-请参见。

是否也可以设置MagickSetImageCompressionQuality?另请参阅我在group4 Compression中找到的唯一代码片段。不,这没有帮助……您使用的是最新版本的ImageMagick吗?这可能是一个已修复的错误。您可以发布一个指向您获得的输出文件的链接吗?输出文件:;在Windows上使用日期为2013年2月20日的DLL(使用最新imagemagick的Linux系统存在问题)。如果新版本成功生成输出,请让我知道(同时,我将寻找新版本/尝试修复Linux上的imagemagick链接问题)!谢谢不幸的是,在写入之前添加MagickSetImageCompressionQuality(0或100)和MagickStripImage没有效果。我将尝试将代码转换为Python或PHP,并在Linux测试系统上运行它,看看这是否有效……谢谢,Mark,我确实需要添加这些调用,但面临另一个问题;已解决-请参见上文。很高兴能为您提供帮助!祝您的项目顺利,谢谢:-)