/*
* @author: xiangbin@taobao.com
* @date : 2010-6-17 Create file,Base Function
* @date : 2010-7-14 duolong@taobao.com, optimize resize funtion
*
* 说明:
* 1. 只有resizeImage返回true,才是合法图片,才保存, 返回false的是非法图片,请应用处理自行删除
* 2. imagemaick 需要 升级到 6.6.3,
* 3. jmagick 5.5.6 版本不变, 要重新build, link到新的imagemagick上
* 更新记录:
* 1. 解决gif动画效果丢失的问题
*
* 存在的问题:
* 1. png图片压缩后大小会变大
*/
import magick.ImageInfo;
import magick.MagickImage;
import magick.MagickException;
import java.io.File;
public class ImgUploadUtil
{
//定义允许上传的最大文件大小
public static final long MAX_FILE_SIZE = (1024 * 1024 * 5); //5Mbyte
//定义允许上传的图片最大像素,这个会影响到系统稳定,建议不要太大
public static final int MAX_IMAGE_PIXEL = (10 * 1000 * 1000);
private static boolean resizeImage(String fileName) throws MagickException
{
MagickImage image = null;
boolean ret = false;
//检查文件大小,避免文件太大导致ImageMagick内存分配不足
if(!checkFileFize(fileName))
{
return ret;
}
try
{
ImageInfo info = new ImageInfo(fileName);
image = new MagickImage();
image.pingImage(info);
String mimeType=image.getImageFormat();
int width = (int) image.getDimension().getWidth();
int height = (int) image.getDimension().getHeight();
System.out.println(mimeType);
//检查图片的像素数
if(width * height > MAX_IMAGE_PIXEL)
{
return ret;
}
//读入图片
image.readImage(info);
//等比例缩小
if(width > 0 && height > 0 )
{
if(mimeType.equalsIgnoreCase("gif")){
MagickImage[] images=image.breakFrames();
for(int i=0;i<images.length;i++){
images[i]= images[i].zoomImage(width,height);
}
image =new MagickImage(images);
}
else{
image = image.zoomImage(width, height);
}
image.profileImage("*", null); //clean unuse info
image.setImageAttribute("comment", null); //clean unuse info
image.setFileName(fileName);
image.writeImage(info);
ret = true;
}
}
catch (Exception e){
//e.printStackTrace();
}
finally
{
if (image != null)
{
image.destroyImages();
}
}
return ret;
}
//检查文件大小
public static boolean checkFileFize(String file)
{
File f = new File(file);
if(f.exists() && f.length() < MAX_FILE_SIZE)
{
return true;
}
return false;
}
//Demo main function
public static void main(String[] args) throws MagickException
{
//boolean[] bRet={false};
String[] fileName = {
"D:\\test\\img\\g2.GIF", //gif
"D:\\test\\img\\g3.gif", //gif
"D:\\test\\img\\g4.gif", //gif
"D:\\test\\img\\g5.gif", //gif
"D:\\test\\img\\g6.gif", //gif
"D:\\test\\img\\p2.png", //png
"D:\\test\\img\\p3.png", //png
"D:\\test\\img\\p4.png", //png
"D:\\test\\img\\p5.png", //png
"D:\\test\\img\\p6.png", //png
"D:\\test\\img\\j2.jpg", //jpg finshing pic!!!
"D:\\test\\img\\j4.jpg", //jpg finshing pic!!!
"D:\\test\\img\\j5.jpg", //jpg finshing pic!!!
"D:\\test\\img\\j6.jpg", //jpg finshing pic!!!
"D:\\test\\img\\bad-1.jpg", //dirty jpg
"D:\\test\\img\\bad-2.jpg", //dirty jpg
"D:\\test\\img\\bad-3.jpg", //dirty jpg
"D:\\test\\img\\bad-4.jpg", //dirty jpg
};
boolean[] bRet=new boolean[fileName.length];
for(int i=0;i<fileName.length;i++){
bRet[i]=false;
File f1 = new File(fileName[i]);
System.out.println("["+i+"]"+"正在压缩文件:"+fileName[i]);
System.out.println("压缩前的大小:"+f1.length());
bRet[i]=resizeImage(fileName[i]);
File f2 = new File(fileName[i]);
System.out.println("压缩后的大小:"+f2.length());
if(bRet[i])
{
System.out.println("Save File:" + fileName[i]);
}
else
{
System.out.println("Delete dirty file:"+ fileName[i]);
}
}
}
}
分享到:
相关推荐
PHP图片处理程序,包括前端JS处理部分和后台PHP处理部分。
一个简单的图片处理程序,可以实现图片的翻转变化,大小改变和像素改变,使用了Qt里面的多线程技术。
基于安卓的图片处理程序,供大家一起共同分享学习。
用内存法实现对图片的处理,快速并且安全.
可以改变图片的格式以及大小 用Microsoft Visual Studio 2005编写
一个小的图片处理程序,里面包含图片的自动播放的动态程序
图片处理程序 中国城
mapgis 入库图片处理程序,在二调入库中做到方便快捷
用vb编写的简易图片处理程序,包括图片灰度处理、图片翻转、图片旋转、图片亮度处理、图片对比度处理、滤镜、万花筒等功能,供大家学习交流使用
图片处理程序可以作为辅助功能放在项目里,做人要厚道,这是借鉴了别人的一个程序,自己修改了一些东西。
tensorflow图片处理方法,包括图片灰度处理,各种效果等
通过“设置”菜单中的命令,可以对图片进行特效处理(图片特效)、调整图片的亮度、大小及对比度(图片调节)、在图片上添加文字(图片文字)、以幻灯片的形式浏览图片(幻灯片放映)。 通过“文件”菜单中的命令,...
基于Python的图片处理程序源码,注释齐全,包含资源文件,可运行; 主要功能: 图片加文字水印,图片水印,加载保存,图片批量起名
转化后图片清晰度发生了变化(处理后有黑色像素化点) 3.效率不好。。 ============== 经过几天的模索、找资料、研究 1。保存后背景色不会变黑色(已测,在PS和页面中确已透明) 2。清晰度只有一点细微变化,处理后...
light image 免费版的批量图片处理程序
用C#写的拥有两图片的渐变过程、卷积效果(低通滤波、高通滤波、边缘检测)等功能的简易图片处理程序。有兴趣的朋友欢迎交流!
C#开发图片处理程序.doc
C开发图片处理程序.doc
关于OpenCV实现图片放大,缩小,选择,等等变化,vc2008下开发,亲测通过