Magickwand转换为TIFF&CCITT组4压缩可提供未压缩的图像

时间:2014-09-08 07:42:39

标签: imagemagick tiff magickwand

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

我正在使用具有magickwand绑定的FreePascal,状态永远不会是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;

http://filehorst.de/d/bmqjzDuB

的源图片

http://filehorst.de/d/bluhjivq

的原始(错误)程序源代码

http://filehorst.de/d/bhlbjHgp

处的原始(错误)输出图像

我做错了什么?

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

我将给予Mark Setchell赏金,因为他的回答是解决方案的必要部分。上面的源代码使用正确的版本更新。

1 个答案:

答案 0 :(得分:0)

至少使用PHP版本,似乎设置压缩类型实际上并不压缩图像 - 请参阅底部here的注释。

在所有示例中,我都发现您必须随后调用MagickSetImageCompressionQuality()StripImage()来实际进行压缩 - 请参阅here