/*
* @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图片处理程序的工作流程可能是这样的:用户在前端选择图片,JS进行预处理并显示预览;然后通过AJAX将图片数据发送到服务器,PHP接收并处理图片(如调整尺寸、保存到服务器),最后返回处理...
本项目是一个使用C#编程语言编写的图片处理程序,专为实现图像格式转换和尺寸调整功能。C#是一种广泛使用的面向对象的编程语言,尤其适合构建Windows桌面应用程序,如本案例所示。 在Microsoft Visual Studio 2005...
标题 "一个简单的图片处理程序" 暗示我们要讨论的是一个使用编程语言处理图像的应用,这里特别提到了“内存法”。这通常意味着程序在内存中完成图像数据的加载、处理和存储,以提高效率和安全性。 内存法在图像处理...
在安卓平台上,开发一款图片处理程序涉及到多个技术领域和组件,包括图像处理库、用户界面设计、文件操作以及性能优化等。以下是对这些关键知识点的详细说明: 1. **Android SDK**:首先,任何安卓应用的开发都需要...
在IT项目开发中,图片处理程序常常扮演着重要的角色,特别是在网页设计、移动应用、数据分析等领域。这个“图片处理程序”作为一个辅助功能,能够帮助开发者有效地管理和优化图像资源,提高用户体验,同时也减轻...
【图片处理程序(Qt)】是一个基于Qt框架开发的简易应用程序,主要功能是实现对图像进行翻转、调整大小和改变像素的操作。Qt是一个跨平台的C++图形用户界面库,广泛应用于桌面应用、移动应用以及嵌入式系统中。在这...
标题中的"delphi不错的图片处理程序"表明这是一个利用Delphi编程环境开发的图像处理软件。Delphi是一款基于Object Pascal语言的集成开发环境(IDE),以其高效、快速的编译能力和强大的Windows应用程序开发能力而...
总的来说,"MapGIS入库图片处理程序"是GIS工作流程中的重要环节,它简化了图片数据的预处理和入库过程,对于土地资源调查、环境监测等项目具有显著的价值。通过掌握上述知识点,用户能够更好地理解和利用这一工具,...
这个“一个小的图片处理程序”显然是一个专为此目的设计的应用软件,可能具有简洁的操作界面和基础的图像处理功能。让我们深入探讨一下相关的知识点。 首先,图片处理程序的基础是图像处理算法。这些算法包括但不...
"图片处理程序 中国城" 是一款专门针对图像编辑和美化设计的应用,它结合了中国特色的文化元素,为用户提供了丰富的图片处理功能。这款程序可能包括了一系列的滤镜、特效、贴纸以及画笔工具,旨在让用户能够轻松创作...
在本压缩包“基于Python的图片处理程序源码.zip”中,您将获得一个使用Python编写的图片处理软件的完整源代码。这个程序具有丰富的功能,包括添加文字水印、图片水印、加载和保存图片以及批量重命名图片。下面我们将...
《易语言图片处理程序源码解析与应用》 在IT领域,编程语言是创造各种软件的基础,而易语言作为一款本土化的编程环境,以其简洁易懂的语法深受初学者和专业开发者的喜爱。本篇文章将深入探讨“Fotushop易语言图片...
【标题】基于J2ME的图片处理程序 在移动设备技术快速发展的今天,J2ME(Java 2 Micro Edition)作为早期的移动平台开发框架,为开发者提供了在小型设备上创建应用程序的能力,其中包括图片处理程序。J2ME以其轻量级...
### C#开发图片处理程序知识点总结 #### 一、项目背景与目标 - **背景**:随着计算机技术的发展,图片处理已成为日常生活中不可或缺的一部分。然而,市场上现有的图片处理软件要么功能过于强大,使得非专业人士难以...
在VB(Visual Basic)编程环境中,我们可以利用GDI+(Graphics Device Interface Plus)库来创建一个简易的图片处理程序。这个程序集成了多种常见的图像操作功能,如灰度处理、图片翻转、旋转、调整亮度与对比度,...
总结一下,本项目中的"C# 图片渐变、卷积效果等简易图片处理程序"提供了一个平台,让开发者能够实现基本的图像处理功能。通过理解和实现这些技术,你可以进一步探索复杂的图像处理任务,如图像分割、特征提取、模式...
通过“设置”菜单中的命令,可以对图片进行特效处理(图片特效)、调整图片的亮度、大小及对比度(图片调节)、在图片上添加文字(图片文字)、以幻灯片的形式浏览图片(幻灯片放映)。 通过“文件”菜单中的命令,...
该项目是一款基于Java语言的综合性图片处理程序,源码文件共计120个,其中Java源文件84个,用于实现核心功能;FXML文件16个,负责用户界面设计;CSS文件6个,用于美化界面;还包括2个gitignore文件、2个prefs文件...