我正在尝试编写一个简单的实用程序,它通过提供的图像文件列表运行,打开它们并检查图像是 24 位还是 32 位。如果他们不是,那么他们就会被转换并被保存下来。
我已经尝试在 ImageMagick 和 Graphics Magick 下进行轻微改动 - 下面的代码在 Graphics Magick 下。我抓住了从这个问题中保存的参数
顺便说一句,我正在使用 Graphics / Image Magick,因为在我的实用程序的其他部分,我需要拆分 PSD 文件,据我所知,Image / Graphics Magick 是唯一可以正确读取/写入带有图层的 PSD 文件的图形 API。(层位很重要)
但我似乎没有运气。任何想法可能是错误的。有人成功做到这一点吗?有更适合的 API 吗?
我正在为每个构建最新的库。
干杯,
马丁
void
fileProcess( const std::string& pFileName )
{
Magick::Image img;
img.read( pFileName );
if( img.type() != Magick::TrueColorMatteType &&
img.type() != Magick::TrueColorType )
{
Magick::ImageType type = img.type();
std::cout << "Wrong image type - " << pFileName << "\n";
img.type(Magick::TrueColorMatteType);
img.magick( "png" );
img.defineSet("png:color-type", "6");
img.defineSet("png:bit-depth", "8");
img.defineSet("png:format", "png32");
img.write( pFileName );
}
}
int
main(int argc, CHAR* argv[])
{
Magick::InitializeMagick( *argv );
std::ifstream fileList( ( "fileList.txt" ) );
if( !fileList.fail() )
{
while( !fileList.eof() )
{
std::string imageFileName;
fileList >> imageFileName;
if( !imageFileName.empty() )
{
fileProcess( imageFileName );
}
}
}
}