我有下面的代码,它将pdf转换成tiff文件,我有和的两个问题。
例如,当我的pdf文件由两页组成时,我只将第二页转换为tiff。
转换-density 300 file.pdf -depth 8 -alpha删除-background white +repage -alpha
/* 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;
}解决方案:在集成@emc卷积提要之后,将多页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;
}发布于 2020-05-22 15:56:44
当我的pdf文件是由两个页面组成的--例如,我只有第二个页面被转换为tiff。
您希望在读取PDF后立即重置图像迭代器。
MagickReadImage(mw, argv[1]);
MagickResetIterator(mw);与使用
命令转换的相同pdf文件相比,tiff文件质量非常差.
我怀疑MagickSetImageResolution应该是MagickSetResolution。
// MagickSetImageResolution(mw, 300, 300);
MagickSetResolution(mw, 300, 300);https://stackoverflow.com/questions/61957870
复制相似问题