Magick++;-JPEG压缩TIFF 我有一个问题,使用GiMAGEKICC++的Migk+ ++创建一个JPEG压缩的TIFF图像。当我以以下方式使用转换工具时,它可以工作: convert 1.jpg -compress JPEG 1.tiff 当我想在C++中做同样的事情时,它看起来是这样的: Image img("1.jpg"); img.compressType(JPEGCompression); img.write("1.tiff");

Magick++;-JPEG压缩TIFF 我有一个问题,使用GiMAGEKICC++的Migk+ ++创建一个JPEG压缩的TIFF图像。当我以以下方式使用转换工具时,它可以工作: convert 1.jpg -compress JPEG 1.tiff 当我想在C++中做同样的事情时,它看起来是这样的: Image img("1.jpg"); img.compressType(JPEGCompression); img.write("1.tiff");,c++,imagemagick,magick++,C++,Imagemagick,Magick++,但此代码不起作用。在尝试生成文件“1.tiff”时引发异常: 它指向文件Thread.cpp 这是一个bug还是我的代码有问题 更新 我将代码更改为: try{ Image img(Desktop+"1.jpg"); img.compressType(JPEGCompression); img.write(Desktop+"1.tiff"); }catch(Exception e){ cout << e.what() << endl; }

但此代码不起作用。在尝试生成文件“1.tiff”时引发异常:

它指向文件Thread.cpp

这是一个bug还是我的代码有问题

更新

我将代码更改为:

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

c:/imagemagick/visualmagick/lib/
libs:

然后尝试运行以下代码:

#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;
}
#包括
#包括
使用名称空间std;
使用名称空间Magick;
int main(){
图像img(“c:/users/patrik stutz/Desktop/1.jpg”);
图像压缩类型(JPEG压缩);
img.write(“c:/users/patrik stutz/Desktop/1.tiff”);
返回0;
}
成功了!!全部使用VS2010。我不知道为什么它在我的另一个项目中没有工作,使用相同的设置…

根据您对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;
}
更新:我刚刚看到您的错误是由tiff库引起的。ImageMagick使用
TIFFGetConfiguredCODECs()
获取支持的压缩编码解码器。因此,您的tiff库必须支持JPEG压缩。也许您可以尝试更新tiff库。

根据您对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;
}

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

如果不更改压缩类型,会发生什么情况?当您使用JPEG文件作为输入时,命令行工具似乎会自动使用JPEG压缩保存TIFF。您的
LDFLAGS
看起来如何?@aeby:这是什么意思?您如何编译源代码?我使用以下编译器参数尝试了您的示例:
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
我正在使用Magick++.h和.lib文件编译项目。命令行参数是:/I“C:\”/I“C:/ImageMagick/”/I“C:\ImageMagick\Magick++\lib”/Zi/nologo/W3/WX-/O2/Oi/Oy-/GL/D“WIN32”/D“NDEBUG”/D“UNICODE控制台”/D“UNICODE”/D“UNICODE”/Gm-/EHa/MT/GS/Gy/fp:precise/Zc:wchar\t/Zc:forScope/fp”Release\FILEminimizer PDF.pch“/Fa”Release\/Fo\/Release\/Fd\vc100.pdb”/Gd/analyze-/errorReport:queue如果不更改compressType会发生什么?当您使用JPEG文件作为输入时,命令行工具似乎会自动使用JPEG压缩保存TIFF。您的
LDFLAGS
看起来如何?@aeby:这是什么意思?您如何编译源代码?我使用以下编译器参数尝试了您的示例:
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
我正在使用Magick++.h和.lib文件编译项目。命令行参数是:/I“C:\”/I“C:/ImageMagick/”/I“C:\ImageMagick\Magick++\lib”/Zi/nologo/W3/WX-/O2/Oi/Oy-/GL/D“WIN32”/D“NDEBUG”/D“UNICODE控制台”/D“UNICODE”/D“UNICODE”/Gm-/EHa/MT/GS/Gy/fp:precise/Zc:wchar\t/Zc:forScope/fp”Release\FILEminimizer PDF.pch“/Fa”Release\/Fo\/Release\/Fd\vc100.pdb”/Gd/analyze-/errorReport:queue您正在使用g++进行此操作。你能解释一下我是如何在Windows上使用VC++的吗?你使用了吗?有一个文件夹<代码> VisualMagick <代码>,所有需要的库和项目文件都用于微软Visual C++60i。水果挞现在已经创建了一个新的空项目,并从零开始。它现在真的很好用。不知道为什么它在另一个具有相同设置的项目中不起作用。。。无论如何,谢谢你;)你会得到赏金的!您正在使用g++进行此操作。你能解释一下我是如何在Windows上使用VC++的吗?你使用了吗?有一个文件夹<代码> VisualMagick <代码>,所有需要的库和项目文件都用于微软Visual C++60i。水果挞现在已经创建了一个新的空项目,并从零开始。它现在真的很好用。不知道为什么它在另一个具有相同设置的项目中不起作用。。。无论如何,谢谢你;)你会得到赏金的!
#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