Magick++ - JPEG compressed TIFF
Magick++ - JPEG compressed TIFF
我在使用magick++ (ImageMagick的c++ API)用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行
这是一个bug还是我的代码有问题?
我把代码改成了:
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,然后添加了以下设置:
附加包含dirs:
c:/imagemagick/magick++/lib;c:/imagemagick/
附加lib dirs:
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图像格式,您需要jpegsrc.v8c.tar.gz来支持jpeg。你必须与libjpeg
和libtiff
连接才能使它工作。您可以使用以下命令创建所有必要的链接器标志:
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
Update:我刚刚看到你的错误是由你的tiff库引起的。ImageMagick使用TIFFGetConfiguredCODECs()
获取支持的压缩编解码器。所以tiff库必须支持JPEG压缩。也许你可以尝试更新你的tiff库
相关文章:
- 如何在 OpenCV c++ 中压缩 TIFF 格式的图像?
- 是否可以通过每次在内存中仅保存一个平铺来处理完整的平铺 tiff 图像?
- 如何对存储为"Compressed Sparse Row"的矩阵进行稀疏矩阵索引?
- 使用 c++ 将 2d CAD 对象转换为 TIFF 格式
- 解压缩 TIFF 数据会打印随机字符
- 解压缩压缩的 TIFF 数据
- 如何将TIFF或PNM转换为QT中的JPEG
- Qt multipage TIFF
- 将 16 位单通道图像写入 Tiff
- 用c++读取tiff图像
- TIFF就地编辑
- 在TIFF中创建一个带有缩略图(libtiff)的子IFD
- 正在打开大型TIFF文件
- 带有GUI的C++程序,可使用远程放置的相机进行拍摄并读取未压缩的TIFF图像
- C/C++LIBTIFF:需要从BW TIFF文件中读取白色和黑色像素的像素位置
- 使用 CImg 库找出多页 tiff 的页数
- writing big tiff pictures
- 将 tiff 图像转换为字符串,以作为二进制应用程序/八位字节流 (C++) 发布
- C++如何在容器中加载 16 位 TIFF 文件以对其数据执行数学运算
- Magick++ - JPEG compressed TIFF