ImageFun 使JPG的缩略图跟原图不一样 (刷微博必备)
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的缩略图跟原图不一样 (刷微博必备)相关推荐
- 将指定路径下的所有SVG文件导出成PNG等格式的图片(缩略图或原图大小)
原文:将指定路径下的所有SVG文件导出成PNG等格式的图片(缩略图或原图大小) WPF的XAML文档(Main.xaml): <Window x:Class="SVG2Image.Ma ...
- layer.open弹层查看缩略图的原图,自适应大小
很多时候需要查看缩略图的原图,那么layer.open是一个不错的选择 直接上代码 //查看原图 function showImg(url){ //alert(url); var img_infor ...
- XP系统的缩略图原理,实现缩略图与原图不同
一.缩略图原理 这是什么原理呢?因为现在JPEG的文件采用了压缩的方式,其过程比较复杂.为了能让大家快速查看其缩略图,JPEG标准在文件中记录了一些EXIF信息.数码照相机拍出的图片带有相机的很多参数 ...
- 《浮图秀》如何优雅查看B站视频封面大图?
浮图秀(PhotoShow)是一款看大图工具, 只需将鼠标放到图片上方,即可查看到图片的最大尺寸 以Bilibili主页视频封面为例 浮图秀(PhotoShow)特别适合看bilibili的视频大图 ...
- 064_photoshow
title 064<浮图秀>优雅查看B站视频封面 浮图秀(PhotoShow)是一款看大图工具, 只需将鼠标放到图片上方,即可查看到图片的最大尺寸 以Bilibili主页视频封面为例 浮图 ...
- ThinkPHP上传图片并压缩为缩略图
使用thinkphp开发app后端中,需要实现一个处理上传图片队列的功能 这是一个上传多图片并且需要对其中一张图片进行压缩,使之成为缩略图方便用于在app端预览 (使用的html5 mui框架开发ap ...
- 前端传来的图片并保存_C# 将前端传来的图片文件分别以大图和缩略图保存
HttpPostedFile pic_upload = Request.Files["file"]; Bitmap bitmap=(Bitmap)System.Drawing.Im ...
- 仿微博、微信、qq 点击缩略图, 查看高清图 UI 组件
TransferImage 项目地址:Hitomis/TransferImage 简介:仿微博.微信.qq 点击缩略图, 查看高清图 UI 组件 更多:作者 提 Bug 标签: Image ...
- linux 无法生成缩略图,Thinkphp3.2 Linux下缩略图生成失败
代码在本地运行正常,部署到Linux就不好使了. 前端代码: php端代码: public function GoodsUploadify() {if (! empty ( $_FILES )) {i ...
最新文章
- 软件项目管理大作业_信息系统项目管理师该如何备考?
- OSError: Unable to download 'ffmpeg.win32.exe'. Perhaps there is a no internet connection? If there
- 出来工作五年的经历总结(五年前,你在干嘛?)
- MySQL的用户的创建以及远程登录配置
- 28 | 堆和堆排序:为什么说堆排序没有快速排序快?
- Google Guava,牛逼的脚手架
- 甲骨文中国疯狂裁员 招聘网站上线“甲骨文人才专场”
- 鼠标点击后的CSS3跑马灯效果
- ajax前台值传到后台
- proto3文件定义Demo-用户表单条、多条、所有、编辑
- JavaWeb学习 第7章 Session 会话编程
- 打造员工能力(组织能力杨三角系列三)
- MD 风格的 Dialog ---- MaterialDialog
- iOS 录制视频MOV格式转MP4
- Object.assign()方法
- Andorid-foreground 解析
- Unity 网络编程入门
- 五年级下学期计算机课总结,信息技术期末教学总结
- 洛谷P1095 守望者的逃离 (从未感觉DP如此清晰, 所以这是DP吗2333)
- 开启createjs+animate cc之旅