in imagetool/commands/identify.cpp [38:103]
int IdentifyCommand::run(const char** args, unsigned int numArgs)
{
if( numArgs < 1 ) {
fprintf(stderr, "Usage: ImageTool identify <input> [scan alpha for transparency]\n");
fprintf(stderr, "\te.g. ImageTool identify input.jpg\n");
fprintf(stderr, "\te.g. ImageTool identify input.jpg false\n");
fprintf(stderr, "\te.g. ImageTool identify input.jpg true\n");
return IMAGECORE_INVALID_USAGE;
}
bool scanAlpha = false;
const char* inputFilePath = args[0];
if( numArgs >= 2 )
{
if( strcmp(args[1], "true") == 0 )
{
scanAlpha = true;
}
}
ImageReader::FileStorage* source = ImageReader::FileStorage::open(inputFilePath);
if( source == NULL ) {
fprintf(stderr, "error: unable to open input file for '%s'\n", inputFilePath);
return IMAGECORE_READ_ERROR;
}
ImageReader* imageReader = ImageReader::create(source);
if( imageReader == NULL ) {
fprintf(stderr, "error: unknown or corrupt image format for '%s'\n", inputFilePath);
delete source;
return IMAGECORE_INVALID_FORMAT;
}
unsigned int width = imageReader->getOrientedWidth();
unsigned int height = imageReader->getOrientedHeight();
bool isRGBA = imageReader->getNativeColorModel() == kColorModel_RGBA;
int hasTransparency = isRGBA ? -1 : 0; // -1: unknown, 0: no, 1: yes
if( hasTransparency < 0 && scanAlpha ) {
hasTransparency = 0;
ImageRGBA* frameImage = ImageRGBA::create(imageReader->getWidth(), imageReader->getHeight(), true);
unsigned int numFrames = imageReader->getNumFrames();
for( unsigned int i = 0; i < numFrames; i++ ) {
if( !imageReader->readImage(frameImage) ) {
fprintf(stderr, "error: unable to decode image '%s'\n", inputFilePath);
return IMAGECORE_INVALID_FORMAT;
}
if( frameImage->scanAlpha() )
{
hasTransparency = 1;
break;
}
imageReader->advanceFrame();
}
delete frameImage;
}
const char* transparencyInfo = hasTransparency < 0 ? "unknown" : (hasTransparency ? "yes" : "no");
fprintf(stdout, "%s format:%s dimensions:%ix%i num_frames:%d transparency:%s\n", inputFilePath, imageReader->getFormatName(), width, height, imageReader->getNumFrames(), transparencyInfo);
delete imageReader;
delete source;
return IMAGECORE_SUCCESS;
}