提供された画像ファイルのリストを実行し、それらを開いて、画像が24ビットまたは32ビットのいずれかであることを確認する単純なユーティリティを作成しようとしています。そうでない場合は、変換されて保存されます。
私はImageMagickとGraphicsMagickの下で少し変更を加えてこれを試しました-以下のコードはGraphicsMagickの下にあります。この質問から保存するためのパラメータを取得しました
ところで、私は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 );
}
}
}
}