首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用MagickWand C-API将多页pdf文件保存到tiff

如何使用MagickWand C-API将多页pdf文件保存到tiff
EN

Stack Overflow用户
提问于 2020-05-22 14:58:34
回答 1查看 180关注 0票数 0

我有下面的代码,它将pdf转换成tiff文件,我有的两个问题。

例如,当我的pdf文件由两页组成时,我只将第二页转换为tiff。

  1. 与使用转换命令转换的相同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 */

代码语言:javascript
复制
#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的功能如下:

代码语言:javascript
复制
#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;
}
EN

回答 1

Stack Overflow用户

发布于 2020-05-22 15:56:44

当我的pdf文件是由两个页面组成的--例如,我只有第二个页面被转换为tiff。

您希望在读取PDF后立即重置图像迭代器。

代码语言:javascript
复制
MagickReadImage(mw, argv[1]);
MagickResetIterator(mw);

与使用

命令转换的相同pdf文件相比,tiff文件质量非常差.

我怀疑MagickSetImageResolution应该是MagickSetResolution

代码语言:javascript
复制
// MagickSetImageResolution(mw, 300, 300);
MagickSetResolution(mw, 300, 300);
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61957870

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档