1.做这个软件起因

最近在微博上见到很多这样的游戏:

一般有9个位置,点开后可以看到原图的样子,比如我点击了9,就会显示原图:

我觉得非常的神奇,想了下应该是缩略图跟原图不一样造成的。查了下,发现一个软件叫Exifer可以实现这样的效果,但是那个软件非常难用,失败率很高,然后我用MFC做了

一个软件叫ImageFun,专门做这个效果。

2.ImageFun软件下载地址:

http://www.waitingfy.com/archives/931/imagefun1

3.ImageFun效果图:

使用方法,就是选择两张图,然后点击生成新图,就会选择一个目录,图就生成完毕了。

4.背后的原理

4.1修改Exif中的缩略图

有兴趣想知道背后原理的,可以继续往下看了。

刚开始为了到达这样的效果做了一个软件主要就是修改了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

4.2生成只有两帧的Gif

想了下应该是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();

记得一定要调用DecreaseBpp函数,不知道为什么只支持8,搞的最终的gif图片效果很差,就放弃使用CxImage了,不过CxImage真的很强大,以后可以用下。

后来就用了某个大神做的 “制作动画GIF的VC源代码”,下载地址: http://download.csdn.net/detail/iamshuke/2567835

就这样发布了最终的ImageFun.

http://www.waitingfy.com/archives/931

5.支持作者

淘宝购买源码,或者援助:地址

ImageFun 使JPG的缩略图跟原图不一样 (刷微博必备)相关推荐

  1. 将指定路径下的所有SVG文件导出成PNG等格式的图片(缩略图或原图大小)

    原文:将指定路径下的所有SVG文件导出成PNG等格式的图片(缩略图或原图大小) WPF的XAML文档(Main.xaml): <Window x:Class="SVG2Image.Ma ...

  2. layer.open弹层查看缩略图的原图,自适应大小

    很多时候需要查看缩略图的原图,那么layer.open是一个不错的选择 直接上代码 //查看原图 function showImg(url){ //alert(url); var img_infor ...

  3. XP系统的缩略图原理,实现缩略图与原图不同

    一.缩略图原理 这是什么原理呢?因为现在JPEG的文件采用了压缩的方式,其过程比较复杂.为了能让大家快速查看其缩略图,JPEG标准在文件中记录了一些EXIF信息.数码照相机拍出的图片带有相机的很多参数 ...

  4. 《浮图秀》如何优雅查看B站视频封面大图?

    浮图秀(PhotoShow)是一款看大图工具, 只需将鼠标放到图片上方,即可查看到图片的最大尺寸 ​以Bilibili主页视频封面为例 浮图秀(PhotoShow)特别适合看bilibili的视频大图 ...

  5. 064_photoshow

    title 064<浮图秀>优雅查看B站视频封面 浮图秀(PhotoShow)是一款看大图工具, 只需将鼠标放到图片上方,即可查看到图片的最大尺寸 以Bilibili主页视频封面为例 浮图 ...

  6. ThinkPHP上传图片并压缩为缩略图

    使用thinkphp开发app后端中,需要实现一个处理上传图片队列的功能 这是一个上传多图片并且需要对其中一张图片进行压缩,使之成为缩略图方便用于在app端预览 (使用的html5 mui框架开发ap ...

  7. 前端传来的图片并保存_C# 将前端传来的图片文件分别以大图和缩略图保存

    HttpPostedFile pic_upload = Request.Files["file"]; Bitmap bitmap=(Bitmap)System.Drawing.Im ...

  8. 仿微博、微信、qq 点击缩略图, 查看高清图 UI 组件

    TransferImage 项目地址:Hitomis/TransferImage  简介:仿微博.微信.qq 点击缩略图, 查看高清图 UI 组件 更多:作者   提 Bug    标签: Image ...

  9. linux 无法生成缩略图,Thinkphp3.2 Linux下缩略图生成失败

    代码在本地运行正常,部署到Linux就不好使了. 前端代码: php端代码: public function GoodsUploadify() {if (! empty ( $_FILES )) {i ...

最新文章

  1. 软件项目管理大作业_信息系统项目管理师该如何备考?
  2. OSError: Unable to download 'ffmpeg.win32.exe'. Perhaps there is a no internet connection? If there
  3. 出来工作五年的经历总结(五年前,你在干嘛?)
  4. MySQL的用户的创建以及远程登录配置
  5. 28 | 堆和堆排序:为什么说堆排序没有快速排序快?
  6. Google Guava,牛逼的脚手架
  7. 甲骨文中国疯狂裁员 招聘网站上线“甲骨文人才专场”
  8. 鼠标点击后的CSS3跑马灯效果
  9. ajax前台值传到后台
  10. proto3文件定义Demo-用户表单条、多条、所有、编辑
  11. JavaWeb学习 第7章 Session 会话编程
  12. 打造员工能力(组织能力杨三角系列三)
  13. MD 风格的 Dialog ---- MaterialDialog
  14. iOS 录制视频MOV格式转MP4
  15. Object.assign()方法
  16. Andorid-foreground 解析
  17. Unity 网络编程入门
  18. 五年级下学期计算机课总结,信息技术期末教学总结
  19. 洛谷P1095 守望者的逃离 (从未感觉DP如此清晰, 所以这是DP吗2333)
  20. 开启createjs+animate cc之旅

热门文章

  1. linux环境nginx-1.10.3安装
  2. Ubuntu redmine 安装
  3. expdp 简单例子
  4. CxImage使用心得(转载)
  5. 值类型和引用类型的区别[转]
  6. asp.net控件开发基础系列
  7. Nginx+DNS负载均衡实现
  8. KVM虚拟机openVSwitch杂记(2)
  9. 自己来实现一套IOC注解框架
  10. Android Robolectric 加载运行本地 So 动态库