`
mengqingyu
  • 浏览: 333014 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

图片批量上传(含压缩图片分辨率)

阅读更多
<div id="FileList">
	<input type=file name="uploadFile[0].file" onkeydown="return false" id="file"/>&nbsp;
	<input type="button"  value=" 添加 " onclick="Addfile_()" />
</div>

//添加上传照片的浏览框
var count = 0;   
function Addfile_(){ 
	if(count > 3) 
	{
		alert("一次最多上传5个照片!");
		return;
	}
   count += 1;   
   var FileList = document.getElementById("FileList");   
   var div = document.createElement("div");   
   var inputTxt = document.createElement("input");   //上传照片浏览框
   inputTxt.type = "file";   
   inputTxt.name = "uploadFile["+count+"].file";   
   inputTxt.onkeydown="return false";
   inputTxt.id="file";
   var space = document.createTextNode(" ");//创建一空格
   var btn = document.createElement("input");   //删除照片按钮
   btn.type = "button";   
   btn.value = " 删除 ";   
   btn.className = "form_1" ;
   btn.onclick = function(){   
         this.parentNode.parentNode.removeChild(this.parentNode);   
         count -= 1;   
   	}   
	 var brEle = document.createElement("br"); 
   div.appendChild(inputTxt); 
   div.appendChild(space); 
   div.appendChild(btn);   
   div.appendChild(brEle); 
   FileList.appendChild(div);   
} 
//验证
function isSameName(pixname)
{
	var s=0;
	var filename = new Array();
	var frm = document.getElementsByTagName('input');  
  for(var i=0;i<frm.length;i++){
     if(frm[i].type  ==  'file' && frm[i].name.indexOf(pixname)!=-1)
    	{          	 
				var iname = frm[i].value; 
				var string_arr = iname.split("\\");       		 
				filename[s] = string_arr[string_arr.length-1];			  
				s++;
				if(iname==''){   
				 alert("照片不能为空!");	
				 return false;	
				}  		
			}		    
  }
  for(var j=0;j<filename.length;j++)
  {
  		var re=/(.*)\.(jpg|bmp|gif)$/;
  		if(!re.exec(filename[j]))
  		{
  			alert("照片"+(j+1)+"格式不正确!");
				return false;	
  		}
  }	    
  for(var j=0;j<filename.length-1;j++){	
 		var uname = filename[j];   
 		for(var k=j+1;k<filename.length;k++)
 		{
 			var sname = filename[k];
 			if (uname == sname)
 			{     
  			alert("照片"+(j+1)+"与"+"照片"+(k+1)+"重名!");
  			return false;			
 			}
 		}
  }
  return true;
}

public String optUploadFile(ActionForm Form);		
	List<FormFile> fileList = new ArrayList<FormFile>();
	if (form.getMultipartRequestHandler() != null)
	{
		/**
		 * 这里使用的是struts的 MultipartRequestHandler 得到页面传过来的所有file类型的表单元素
		 */
		Hashtable fileht = form.getMultipartRequestHandler().getFileElements();
		for (Enumeration e = fileht.keys(); e.hasMoreElements();)
		{
			String key = (String) e.nextElement();
			FormFile file = (FormFile) fileht.get(key);
			fileList.add(file);
		}
		for (FormFile file : fileList)
		{
			Date time = new Date();    
			SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-ddHHmmssMM");
			String date = formatter.format(time).replace("", "");
			if (file == null){
				continue;
			}
			//得到上传文件的后缀名
			String type=file.getFileName().substring(file.getFileName().lastIndexOf("."), file.getFileName().length());
			try
			{				
					File ff = new File("/路径");
					if(!ff.exists()){
						ff.mkdirs();
					}
					writeFile("/路径/文件名", file.getInputStream());
					//将照片按尺寸缩放*/
					ImageDealWith.imageToDeal("/路径/"+"文件名");
					Thread.sleep(1000);
					message="success";
			} catch (Exception e)
			{
				e.printStackTrace();
			}	
	}
}

public static File writeFile(String path, InputStream is)
{
	File f = createFileIfNotExist(path);
	byte[] buffer = new byte[8192];
	OutputStream fos = null;
	int readByte = 0;
	try
	{
		fos = new FileOutputStream(f);
		while ((readByte = is.read(buffer, 0, 8192)) != -1)
		{
			fos.write(buffer, 0, readByte);
		}
		fos.flush();
	} catch (FileNotFoundException e)
	{
		e.printStackTrace();
	} catch (IOException e)
	{
		e.printStackTrace();
	} finally
	{
		try
		{
			if (is != null)
			{
				is.close();
				is = null;
			}

			if (fos != null)
			{
				fos.close();
				fos = null;
			}

			
		} catch (IOException e)
		{
			e.printStackTrace();
		}
	}
	return f;
}
		
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.color.ColorSpace;
import java.awt.image.BufferedImage;
import java.awt.image.ColorConvertOp;
import java.awt.image.CropImageFilter;
import java.awt.image.FilteredImageSource;
import java.awt.image.ImageFilter;
import java.io.*;
import javax.imageio.ImageIO;

import org.apache.commons.validator.GenericValidator;

public class ImageDealWith
{

	private static String	types	= "jpg|gif|jpeg|png|bmp";

	/** */
	/**
	 * 图像切割
	 * 
	 * @param srcImageFile 源图像地址
	 * @param descDir 切片目标文件夹
	 * @param destWidth 目标切片宽度
	 * @param destHeight 目标切片高度
	 */
	public static void cut(String srcImageFile, String descDir, int destWidth, int destHeight)
	{
		try
		{
			Image img;
			ImageFilter cropFilter;
			// 读取源图像
			BufferedImage bi = ImageIO.read(new File(srcImageFile));
			int srcWidth = bi.getHeight(); // 源图宽度
			int srcHeight = bi.getWidth(); // 源图高度
			if (srcWidth > destWidth && srcHeight > destHeight)
			{
				Image image = bi.getScaledInstance(srcWidth, srcHeight,
					Image.SCALE_DEFAULT);
				destWidth = 200; // 切片宽度
				destHeight = 150; // 切片高度
				int cols = 0; // 切片横向数量
				int rows = 0; // 切片纵向数量
				// 计算切片的横向和纵向数量
				if (srcWidth % destWidth == 0)
				{
					cols = srcWidth / destWidth;
				} else
				{
					cols = (int) Math.floor(srcWidth / destWidth) + 1;
				}
				if (srcHeight % destHeight == 0)
				{
					rows = srcHeight / destHeight;
				} else
				{
					rows = (int) Math.floor(srcHeight / destHeight) + 1;
				}
				// 循环建立切片
				// 改进的想法:是否可用多线程加快切割速度
				for (int i = 0; i < rows; i++)
				{
					for (int j = 0; j < cols; j++)
					{
						// 四个参数分别为图像起点坐标和宽高
						// 即: CropImageFilter(int x,int y,int width,int height)
						cropFilter = new CropImageFilter(j * 200, i * 150, destWidth, destHeight);
						img = Toolkit.getDefaultToolkit().createImage(
							new FilteredImageSource(image.getSource(), cropFilter));
						BufferedImage tag = new BufferedImage(destWidth, destHeight, BufferedImage.TYPE_INT_RGB);
						Graphics g = tag.getGraphics();
						g.drawImage(img, 0, 0, null); // 绘制缩小后的图
						g.dispose();
						// 输出为文件
						ImageIO.write(tag, "JPEG", new File(descDir
									+ "pre_map_"
									+ i
									+ "_"
									+ j
									+ ".jpg"));
					}
				}
			}
		} catch (Exception e)
		{
			e.printStackTrace();
		}
	}

	/** */
	/**
	 * 图像类型转换 GIF->JPG GIF->PNG PNG->JPG PNG->GIF(X)
	 */
	public static void convert(String source, String result)
	{
		try
		{
			File f = new File(source);
			f.canRead();
			f.canWrite();
			BufferedImage src = ImageIO.read(f);
			ImageIO.write(src, "JPG", new File(result));
		} catch (Exception e)
		{
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	/** */
	/**
	 * 彩色转为黑白
	 * 
	 * @param source
	 * @param result
	 */
	public static void gray(String source, String result)
	{
		try
		{
			BufferedImage src = ImageIO.read(new File(source));
			ColorSpace cs = ColorSpace.getInstance(ColorSpace.CS_GRAY);
			ColorConvertOp op = new ColorConvertOp(cs, null);
			src = op.filter(src, null);
			ImageIO.write(src, "JPEG", new File(result));
		} catch (IOException e)
		{
			e.printStackTrace();
		}
	}

	/**
	 * @function:修改文件名为:原文件名+"_b"
	 * @param resultPath
	 * @return
	 * @author: Guanshengjun 2008-11-28 上午08:50:33
	 */
	public static String returnNewFileName(String resultPath, String suffix)
	{
		String result = "";// 修改后的文件名称
		if (!GenericValidator.isBlankOrNull(resultPath))
		{
			int index = resultPath.lastIndexOf(".");// 获得文件后缀名的位置
			if (index > 0)
			{// 组装改名之后的新文件名称
				result = resultPath.substring(0, index)
							+ suffix
							+ "."
							+ resultPath.substring(index + 1);
				return result;
			}
		}
		return resultPath;
	}

	/**
	 * @function:图片缩放
	 * @param widthL :缩放之后图片宽度
	 * @param s_resultPath :缩放后的图片全路径
	 * @param b_resultPath :原图片
	 * @throws IOException
	 * @author: Guanshengjun 2008-11-28 上午08:44:09
	 */
	public static void changeImageSize(Integer widthL, String s_resultPath, String b_resultPath)
				throws IOException
	{
		try
		{
			BufferedImage src = ImageIO.read(new File(b_resultPath)); // 读入文件
			Integer width = src.getWidth();// 图片原始宽度
			Integer height = src.getHeight();// 图片原始高度
			double w ;// widthL为要缩放的宽度,计算缩放比例
			if(width>=height){
				w=(widthL.intValue()*1.0)/width.intValue();
				width=widthL;
				height=(int) Math.ceil(height*w);
			}else{
				w=(widthL.intValue()*1.0)/height.intValue();
				height=widthL;
				width=(int) Math.ceil(width*w);
			}
			Image image = src.getScaledInstance(width, height, Image.SCALE_SMOOTH);
			BufferedImage tag = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
			Graphics g = tag.getGraphics();
			g.drawImage(image, 0, 0, null); // 绘制缩小后的图
			g.dispose();
			ImageIO.write(tag, "JPEG", new File(s_resultPath));// 输出到文件流
		} catch (Exception e)
		{
			e.printStackTrace();
		}
	}

	public static void imageToDeal(String imagePath)
	{
		String image_b = "";// 大图片名称
		String nameExt = "";// 文件扩展名
		File file = new File(imagePath);
		if (file.exists())
		{
			if (!file.isDirectory())
			{
				nameExt = file.getName().substring(file.getName().lastIndexOf(".") + 1,
					file.getName().length());
				if (types.indexOf(nameExt.toLowerCase()) != -1)
				{
					String[] xmlPicName = imageNameSuffix(ConstantDefine.PIC_DEAL_SUFFIX);
					if (xmlPicName != null)
					{
						int end = xmlPicName.length / 2;
						String origName = ""; // 原图路径
						String newName = "";// 新生成图的路径
						for (int i = 0; i < end; i++)
						{
							image_b = returnNewFileName(imagePath, xmlPicName[i * 2]); // 获得大图片名称
							File b_file = new File(image_b);
							newName = image_b;
							origName=imagePath;
							// 缩小图片大小:宽,高,上传服务器路径
							try
							{
								changeImageSize(
									Integer.parseInt(xmlPicName[i * 2 + 1]), newName,
									origName);
							} catch (Exception e)
							{
								b_file.renameTo(file);
								e.printStackTrace();
							}
						}
					}
				}
			}
		}
	}

	private static String[] imageNameSuffix(String pathName)
	{
		String name = XmlConfigurationHelper.getParameter(pathName);
		if (GenericValidator.isBlankOrNull(name))
		{
			return null;
		}
		String[] imageName = name.split("\\|");
		return imageName;
	}
}
  • 大小: 3.4 KB
分享到:
评论

相关推荐

    可按百分比,按分辨率批量压缩图片袖珍工具

    标题中的“可按百分比,按分辨率批量压缩图片袖珍工具”表明这是一款小巧而功能强大的软件,专门用于批量处理图像文件,以实现按比例或根据特定分辨率进行压缩。这样的工具在处理大量图片时非常实用,例如对于网页...

    照片批量压缩修改分辨率程序

    在实际应用中,可能需要降低图片分辨率以适应网络展示,或者压缩图片大小以节省存储空间。程序的执行流程可能包括以下步骤: 1. 图片读取:程序首先读取用户指定的图片文件,将其加载到内存中。 2. 分辨率调整:...

    图片批量压缩工具.zip

    "图片批量压缩工具.zip" 提供了一种高效的方法来减小图片文件的大小,同时保持其原有的分辨率不变。这在存储、传输或上传图片时具有显著的优势,因为大尺寸的图片往往占用过多的空间,导致存储和分享变得困难。 ...

    批量图片压缩处理工具

    例如,网站管理员需要快速压缩大量的图片以加快网页加载速度,摄影师则可能需要批量压缩图片以便上传到图库平台。在这些场景中,使用JPGCompact20这样的工具,可以快速有效地处理大批量的图片,节省时间和精力。 ...

    图片批量压缩工具 用于数码相片的大量压缩 速度很快

    4. **移动设备** - 在手机或平板电脑上,压缩图片可以提高存储效率,延长设备的使用寿命。 ### 工具选择与使用 "图片批量压缩工具"这样的软件,可能提供了以下功能: - 自定义压缩设置,如压缩等级、输出分辨率、...

    图片批量压缩软件 使用简单

    一般来说,用户只需选择包含待压缩图片的文件夹,设置所需的压缩级别、尺寸参数,然后点击开始,软件就能自动处理所有图片。其中,“默认压缩”通常已经考虑了平衡图片质量和文件大小的关系,但用户也可以根据实际...

    图片批量压缩.rar

    而提及“微信文件”,意味着该工具特别适合处理从微信接收或发送的图片,因为微信对单个文件大小有限制,压缩图片能确保顺利传输。 标签“图片”、“批量处理”、“微信图片”、“图片压缩”和“照片处理”进一步...

    图片批量压缩器 图片批量压缩器

    在网页设计、社交媒体分享、存储空间有限或者上传速度有限的场景下,图片批量压缩显得尤为重要。 图片的体积主要由其分辨率、颜色深度和所使用的压缩算法决定。常见的图片格式有JPEG、PNG、GIF等,每种格式都有其...

    图片格式分辨率批量转换.rar

    本资源"图片格式分辨率批量转换.rar"提供了解决这一问题的工具或方法,使得用户可以高效地处理大量图片,无需逐一手动操作。下面将详细介绍关于图片格式和分辨率转换的知识点,以及批量处理的实用技巧。 1. 图片...

    【图片批量修改、压缩】ImageTuner

    ImageTuner就是这样一款软件,它能够帮助用户批量修改图片、进行压缩和格式转换,极大地提高了工作效率。 首先,让我们来了解一下ImageTuner的核心功能。批量修改图片是其主要特性之一,无论是调整大小、旋转角度...

    JPG图片批量压缩器

    JPG图片批量压缩器是一种专门针对JPG格式图片设计的工具,它的主要功能是将一组JPG图片在不失真或微小失真的情况下,调整其文件大小,以达到节省存储空间、提高上传速度或满足特定文件大小限制的目的。这类软件通常...

    图片批量压缩软件

    在IT领域,图片批量压缩软件是一种非常实用的工具,它能帮助用户快速、高效地减小图片文件的大小,尤其适合处理大量图片的情况。在现代数字生活中,我们经常需要上传图片到社交媒体、邮件或者网络存储服务,而这些...

    可以把图片瞬间压缩成自己想要的分辨率和大小的一个东西

    标题中的“可以把图片瞬间压缩成自己想要的分辨率和大小的一个东西”指的是一个图像处理软件或在线服务,能够快速调整图片的尺寸和文件大小以满足特定需求。这种工具通常使用优化算法来减小图像数据量,同时保持可...

    PhotoMaster图片高质量批量压缩

    《PhotoMaster图片高质量批量压缩详解》 在当前数字化时代,图片处理已经成为日常生活和工作中不可或缺的一部分。无论是摄影师、设计师,还是普通用户,我们都可能面临大量图片需要处理的情况,尤其是在存储和分享...

    批量图片压缩软

    批量图片压缩工具,如“批量图片压缩软”或本例中的“PhotoMaster”,为用户提供了高效处理大量图片的能力,节省存储空间,加快上传速度,同时保持图片质量。以下是关于批量图片压缩和“PhotoMaster”软件的一些详细...

    最好的GIF,JPG,PNG批量修改大小尺寸压缩图片的工具集共5个

    "最好的GIF,JPG,PNG批量修改大小尺寸压缩图片的工具集共5个"这个资源提供了高效解决方案,帮助用户快速优化这些常见格式的图片,以适应不同的应用场景。 1. **GIF** 格式:GIF是一种支持动画的图像格式,广泛用于...

    图片压缩软件(免安装)

    标题提到的“图片压缩软件(免安装)”是一款无需安装即可使用的轻量级工具,专为方便用户批量压缩图片设计,旨在节省存储空间,加快上传和下载速度。这款软件小巧玲珑,易于操作,适合那些希望快速有效地优化图片...

    图片批量处理软件(处理不同大小,可批量处理)

    描述中反复提及“图片批量处理软件”,强调了其在处理不同大小图片时的灵活性,这意味着软件应具备适应不同分辨率和像素图片的能力。 首先,我们关注到压缩包中的`imgbatsetup.exe`文件,这很可能是该图片批量处理...

    图片批量缩小软件

    对于那些需要上传到网站或移动设备的图片,批量缩小功能尤其有用,因为这可以减少上传时间和数据占用。 在图片缩小的过程中,软件可能会使用几种不同的方法来实现尺寸和体积的减小。其中最常见的方法是通过改变像素...

    C#做的一个浏览器,还可以实现批量压缩图片,看图,主要用于网站上传图片过大使用

    "批量压缩图片"是这个项目的核心特性。在网站上传图片时,如果图片文件过大,可能导致加载速度慢,影响用户体验,甚至超过服务器或平台允许的上传限制。因此,该应用提供了批量处理图片的功能,可以一次性对多张图片...

Global site tag (gtag.js) - Google Analytics