gpt4 book ai didi

c++ - Magick++ - JPEG 压缩的 TIFF

转载 作者:行者123 更新时间:2023-11-30 03:06:02 25 4
gpt4 key购买 nike

我在使用 ImageMagick 的 C++ API Magick++ 创建带有 JPEG 压缩的 TIFF 图像时遇到问题。当我按以下方式使用转换工具时,它起作用了:

convert 1.jpg -compress JPEG 1.tiff

当我想在 C++ 中做同样的事情时,它看起来像这样:

Image img("1.jpg");
img.compressType(JPEGCompression);
img.write("1.tiff");

但这段代码有效。它在尝试生成文件“1.tiff”时抛出异常:

Unhandled exception at 0x74ecb727 in test.exe: Microsoft C++ exception: Magick::ErrorCoder at memory location 0x002ffc2c..

指向文件Thread.cpp中的103行

这是错误还是我的代码有问题?

更新

我把代码改成了这样:

try{
Image img(Desktop+"1.jpg");
img.compressType(JPEGCompression);
img.write(Desktop+"1.tiff");
}catch(Exception e){
cout << e.what() << endl;
}

输出:test.exe: CompressionNotSupported ‘JPEG’ @ error/tiff.c/WriteTIFFImage/2611

所以……好像不支持。问题是:为什么他转换工具支持呢?有人知道这样做的方法吗?

更新

我创建了一个空的新项目,重新编译了 ImageMagick,然后添加了以下设置:

其他包含目录:

c:/imagemagick/magick++/lib;c:/imagemagick/

额外的库目录:

c:/imagemagick/visualmagick/lib/

库:

CORE_RL_bzlib_.lib;CORE_RL_coders_.lib;CORE_RL_filters_.lib;CORE_RL_jbig_.lib;CORE_RL_jp2_.lib;CORE_RL_jpeg_.lib;CORE_RL_lcms_.lib;CORE_RL_libxml_.lib;CORE_RL_magick_.lib;CORE_RL_Magick++_.lib;CORE_RL_png_.lib;CORE_RL_tiff_.lib;CORE_RL_ttf_.lib;CORE_RL_wand_.lib;CORE_RL_xlib_.lib;CORE_RL_zlib_.lib;CORE_RL_wmf_.lib;X11.lib;Xext.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;wsock32.lib;winmm.lib;

然后尝试运行以下代码:

#include <iostream>
#include <Magick++.h>

using namespace std;
using namespace Magick;

int main() {
Image img("c:/users/patrik stutz/Desktop/1.jpg");
img.compressType(JPEGCompression);
img.write("c:/users/patrik stutz/Desktop/1.tiff");
return 0;
}

成功了!!全部使用VS2010。我不知道为什么它在我的其他具有相同设置的项目中不起作用...

最佳答案

根据 ImageMagick Image Formats你需要 jpegsrc.v8c.tar.gz对于 jpeg 支持。您必须链接 libjpeglibtiff 才能使其正常工作。您可以使用此命令创建所有必要的链接器标志:

Magick++-config --cppflags --cxxflags --ldflags --libs

对我来说,下面的代码是有效的:

#include <Magick++.h>
#include <iostream>
using namespace std;
using namespace Magick;

int main() {
Image img("1.jpg");
img.compressType(JPEGCompression);
img.write("1.tiff");
return 0;
}

使用这个编译命令:

g++ -L/usr/lib -L/usr/lib/X11 -o"testim"  ./src/testim.o -lMagick++ -lMagickWand -lMagickCore -llcms -ltiff -lfreetype -ljpeg -llqr-1 -lglib-2.0 -lfontconfig -lXext -lSM -lICE -lX11 -lXt -lbz2 -lz -lm -lgomp -lpthread -lltdl

更新:我刚刚看到您的错误是由您的 tiff 库引起的。 ImageMagick 使用 TIFFGetConfiguredCODECs() 获取支持的压缩编解码器。所以你的 tiff 库必须支持 JPEG 压缩。也许您可以尝试更新您的 tiff 库。

关于c++ - Magick++ - JPEG 压缩的 TIFF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7146827/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com