2

我正在尝试编写一个简单的实用程序,它通过提供的图像文件列表运行,打开它们并检查图像是 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 );
            }
        }
    }
}
4

0 回答 0