void doMagicIn(QString path, QString q, QString OPath) { QRegExp isMask = QRegExp("*m.gif"); isMask.setPatternSyntax(QRegExp::Wildcard); QRegExp isBackupDir = QRegExp("*/_backup/"); isBackupDir.setPatternSyntax(QRegExp::Wildcard); if(isBackupDir.exactMatch(path)) return; //Skip backup directories if(isMask.exactMatch(q)) return; QImage target; QString imgFileM; QStringList tmp = q.split(".", QString::SkipEmptyParts); if(tmp.size()==2) imgFileM = tmp[0] + "m." + tmp[1]; else return; //skip unexists pairs if(!QFile(path+q).exists()) return; if(!QFile(path+imgFileM).exists()) { QString saveTo; QImage image = loadQImage(path+q); if(image.isNull()) return; QTextStream(stdout) << QString(path+q+"\n").toUtf8().data(); saveTo = QString(OPath+(tmp[0].toLower())+".gif"); //overwrite source image (convert BMP to GIF) if(toGif( image, saveTo ) ) //Write gif { QTextStream(stdout) <<"GIF-1 only\n"; } else { QTextStream(stdout) <<"BMP-1 only\n"; image.save(saveTo, "BMP"); //If failed, write BMP } return; } if(!noBackUp) { //create backup dir QDir backup(path+"_backup/"); if(!backup.exists()) { QTextStream(stdout) << QString("Create backup with path %1\n").arg(path+"_backup"); if(!backup.mkdir(".")) QTextStream(stderr) << QString("WARNING! Can't create backup directory %1\n").arg(path+"_backup"); } //create Back UP of source images if(!QFile(path+"_backup/"+q).exists()) QFile::copy(path+q, path+"_backup/"+q); if(!QFile(path+"_backup/"+imgFileM).exists()) QFile::copy(path+imgFileM, path+"_backup/"+imgFileM); } QImage image = loadQImage(path+q); QImage mask = loadQImage(path+imgFileM); if(mask.isNull()) //Skip null masks return; target = setAlphaMask(image, mask); if(!target.isNull()) { //Save before fix //target.save(OPath+tmp[0]+"_before.png"); //mask.save(OPath+tmp[0]+"_mask_before.png"); QTextStream(stdout) << QString(path+q+"\n").toUtf8().data(); //fix if(image.size()!= mask.size()) mask = mask.copy(0,0, image.width(), image.height()); mask = target.alphaChannel(); mask.invertPixels(); //Save after fix //target.save(OPath+tmp[0]+"_after.bmp", "BMP"); QString saveTo; saveTo = QString(OPath+(tmp[0].toLower())+".gif"); //overwrite source image (convert BMP to GIF) if(toGif(image, saveTo ) ) //Write gif { QTextStream(stdout) <<"GIF-1 "; } else { QTextStream(stdout) <<"BMP-1 "; image.save(saveTo, "BMP"); //If failed, write BMP } saveTo = QString(OPath+(tmp[0].toLower())+"m.gif"); //overwrite mask image if( toGif(mask, saveTo ) ) //Write gif { QTextStream(stdout) <<"GIF-2\n"; } else { mask.save(saveTo, "BMP"); //If failed, write BMP QTextStream(stdout) <<"BMP-2\n"; } } else QTextStream(stderr) << path+q+" - WRONG!\n"; }
int doMagicIn(QString path, QString q, QString OPath) { //skip unexists pairs if(!QFile(path+q).exists()) return CNV_SKIPPED; QImage ImgSrc; QImage image; QImage mask; ImgSrc = loadQImage(path+q); if(ImgSrc.isNull()) //Skip null images return CNV_FAILED; QString bname = QFileInfo(path+q).baseName(); QString saveToImg = QString(OPath+(bname.toLower())+".gif"); QString saveToMask = QString(OPath+(bname.toLower())+"m.gif"); QTextStream(stdout) << path+q+"\n"; mask = ImgSrc.alphaChannel(); mask.invertPixels(); //Write mask image if( toGif(mask, saveToMask ) ) //Write gif { QTextStream(stdout) <<"GIF-1\n"; } else { mask.save(saveToMask, "BMP"); //If failed, write BMP QTextStream(stdout) <<"BMP-1\n"; } image = ImgSrc.convertToFormat(QImage::Format_RGB32); mask = ImgSrc.alphaChannel(); mask.invertPixels(); for(int w=0; w < mask.width(); w++) for(int h=0; h < mask.height(); h++) { if(mask.pixel(w,h)==qRgb(0xFF,0xFF,0xFF)) //Fill white pixel into black on image { image.setPixel(w,h, qRgb(0,0,0)); } else if(mask.pixel(w,h)!=qRgb(0,0,0)) //Fill non-black pixel color into black on mask { mask.setPixel(w,h, qGray(0,0,0)); } } mask.invertPixels(); image.setAlphaChannel(mask); //Write mask image if( toGif(image, saveToImg ) ) //Write gif { QTextStream(stdout) <<"GIF-2\n"; } else { image.save(saveToImg, "BMP"); //If failed, write BMP QTextStream(stdout) <<"BMP-2\n"; } if(removeSource) QFile(path+q).remove(); return CNV_SUCCESS; }