最近在微博上见到很多这样的游戏:
一般有9个位置,点开后可以看到原图的样子,比如我点击了9,就会显示原图:
我觉得非常的神奇,想了下应该是缩略图跟原图不一样造成的。查了下,发现一个软件叫Exifer可以实现这样的效果,但是那个软件非常难用,失败率很高,然后我用MFC做了
一个软件叫ImageFun,专门做这个效果。
http://www.waitingfy.com/archives/931/imagefun1
使用方法,就是选择两张图,然后点击生成新图,就会选择一个目录,图就生成完毕了。
有兴趣想知道背后原理的,可以继续往下看了。
刚开始为了到达这样的效果做了一个软件主要就是修改了Exif的缩略图,什么是Exif呢?Exif格式就是在JPEG格式头部插入了数码照片的信息,包括拍摄时的光圈、快门、白平衡、ISO、焦距、日期时间等各种和拍摄条件以及相机品牌、型号、色彩编码、拍摄时录制的声音以及全球定位系统(GPS)、缩略图等。
有很多C的开源库可以实现这样的效果,但是我不懂C语言啊,最后找了一个C++的库叫Exiv2, Exiv2 is a C++ library and a command line utility to manage image metadata.
核心代码就几句话:
1.载入图片
2.修改缩略图
void CProduceImgDlg::ChangeThumb(CString desPath, CString thumbPath){
try {
Exiv2::Image::AutoPtr image = Exiv2::ImageFactory::open(desPath.GetBuffer(0));
assert(image.get() != 0);
image->readMetadata();
Exiv2::ExifData &exifData = image->exifData();
Exiv2::ExifThumb thumb = Exiv2::ExifThumb(exifData);
thumb.setJpegThumbnail(thumbPath.GetBuffer(0));
image->writeMetadata();
}
catch (Exiv2::AnyError& e) {
//std::cout << "Caught Exiv2 exception '" << e.what() << "'\n";
}
}
等我做了一张图片上传到微博上的时候,发现不行了!在电脑上浏览非常正常的JPG上传微博就不行了,发现是被微博压缩了。
只能换个思路了?
修改JPG的 ImageFun 下载地址:
http://www.waitingfy.com/archives/931/imagefun
想了下应该是gif图片格式,然后把第二帧的时间设置格外长,下载了微博上其他人做的图片,放到UleadGIFAnimator中看了下发现确实是这样的:
UleadGIFAnimator能很轻松的制作gif,都想放弃做这个ImageFun软件了。硬着头皮做完算了。
找了下能生成Gif图片的C++类库,比较出名的是CxImage.
它里面的一个生成gif例子是这样的:
CxImage ima1,ima2;
ima1.Load("c://walle.jpg");
ima2.Load("c://otherPhone2.jpg");
ima1.DecreaseBpp(8,false,0,0);
ima2.DecreaseBpp(8,false,0,0);
ima1.SetTransIndex(ima1.GetPixelIndex(0,0));
ima2.SetTransIndex(ima2.GetPixelIndex(0,0));
ima1.SetFrameDelay(10);
ima2.SetFrameDelay(20000);
CxImage *pimage[2];
pimage[0] = &ima1;
pimage[1] = &ima2;
CxIOFile hFile;
hFile.Open(_T("c://ani.gif"),_T("wb"));
CxImageGIF multiimage;
multiimage.SetComment("CxImage demo");
multiimage.SetLoops(3);
multiimage.SetDisposalMethod(2);
multiimage.Encode(&hFile,pimage,2,false,false);
hFile.Close();
后来就用了某个大神做的 “制作动画GIF的VC源代码”,下载地址: http://download.csdn.net/detail/iamshuke/2567835
就这样发布了最终的ImageFun.
http://www.waitingfy.com/archives/931
淘宝购买源码,或者援助:地址