我有以下将 pdf 转换为 tiff 文件的代码,我有两个问题。
例如,当我的 pdf 文件由两页组成时,我只有第二页转换为 tiff。
与使用 convert 命令转换的相同 pdf 文件相比,tiff 文件质量非常差
转换 -density 300 file.pdf -depth 8 -alpha remove -background white +repage file.tiff
/* gcc -I/usr/local/include/ImageMagick-7 -DMAGICKCORE_HDRI_ENABLE=1 -DMAGICKCORE_QUANTUM_DEPTH=16 magick.c -lMagickWand-7.Q16HDRI -o magick */
#include <MagickWand/MagickWand.h>
int main(int argc, char *argv[])
{
MagickWand *mw = NULL;
MagickWandGenesis();
mw = NewMagickWand();
MagickSetImageResolution(mw, 300, 300);
MagickReadImage(mw, argv[1]);
PixelWand *color = NewPixelWand();
PixelSetColor(color, "white");
MagickSetImageBackgroundColor(mw, color);
MagickWand *newwand = MagickMergeImageLayers(mw, FlattenLayer);
MagickSetImageCompressionQuality(newwand, 95);
MagickSetFirstIterator(newwand);
MagickSetFormat(newwand, "tiff");
MagickWriteImage(newwand, "/tmp/out.tiff");
mw = DestroyMagickWand(mw);
newwand = DestroyMagickWand(newwand);
MagickWandTerminus();
return 0;
}
解决方案: 集成@emcconville feeds 后,将多页 PDF 转换为 tiff 的功能如下:
#include <MagickWand/MagickWand.h>
static void __attribute__((constructor)) mg_ctor(void)
{
MagickWandGenesis();
}
static void __attribute__((destructor)) mg_dtor(void)
{
MagickWandTerminus();
}
/*
* pdf2tiff {pdf file} {output tiff file}
*
*/
int main(int argc, char *argv[])
{
MagickWand *mw = NewMagickWand();
int i = 0;
MagickSetResolution(mw, 300, 300);
MagickReadImage(mw, argv[1]);
PixelWand *color = NewPixelWand();
PixelSetColor(color, "white");
for (i = 0; i < MagickGetNumberImages(mw); i++) {
MagickSetIteratorIndex(mw, i);
MagickSetImageAlphaChannel(mw, RemoveAlphaChannel);
MagickSetImageBackgroundColor(mw, color);
}
MagickResetIterator(mw);
MagickSetFormat(mw, "tiff");
MagickWriteImages(mw, argv[2], 1);
DestroyMagickWand(mw);
DestroyPixelWand(color);
return 0;
}