`
mengqingyu
  • 浏览: 329143 次
  • 性别: 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
分享到:
评论

相关推荐

    图片压缩工具v2.8绿色免费版

    这款图片压缩工具是一款免费的图片处理软件,可以帮你批量压缩图片体积,并且图片的质损非常低,如果你在上传图片到一些论坛提示图片过大的时候可以利用这款工具压缩一下图片再上传就好了。 使用方法: 目前只支持...

    ppt图片转换

     如果您的手持终端读取图片的能力不佳,建议您设置图片分辨率为320X240。  如果您的手持终端性能优异,如(iphone4、高清MP4、高处理器手机),推荐使用960X720的分辨率。  如无特殊要求,一般选择JPG格式可以...

    淘淘图片批处理之星.exe

    包括批量格式转换、批量脚本处理、批量文件改名、批量调整尺寸、批量制作缩略图、批量压缩JPG、批量合并图片、批量添加背景、批量截取图片、批量切割图片、批量上传文件、创建PDF文件、创建多页TIF、创建电子相册等...

    在线文件压缩-crx插件

    :check_mark: 支持文件批量上传压缩 :check_mark: 可以选择不同压缩选项 :check_mark: 压缩速度快、压缩率高且质量清晰 :check_mark: 可以实时对比压缩前后文件体积大小变化 产品功能: :play_button: 图片压缩 支持...

    凌霄图像批处理专家4.2.1.288破解版

    包括“批量格式转换”、“批量脚本处理”、“批量添加水印”、“批量文件改名”、“批量调整尺寸”、“批量制作缩略图”、“批量压缩JPG”、“创建电子相册”、“创建PDF文件”、“批量上传文件”,“批量合并图片”...

    网趣商城网站源文件

    网趣网上购物系统旗舰版支持商品图片批量上传,可以一次性选择本地若干张图片批量上传并自动插入到商品介绍。是继网趣时尚版、Html静态版之后推出的又一力作!旗舰版的推出,旨在打造一套全新的购物系统版本,使之...

    网趣网上购物系统旗舰版 v15.3

    支持上传的图片在线管理,非常方便,并且支持图片批量上传功能,同时支持订单二次编辑以及多级分类隐藏等实用功能,新版增加商品大图浏览与列表显示功能,使分类浏览更方便。网趣旗舰版采用当今流行的排版模式及标签...

    黑马程序员 安卓学院 万元哥项目经理 分享220个代码实例

    |--图片之获取SD卡所有及边界可调及压缩和软引用和内存回收 |--图片的LRU算法内存保存和读取 |--图片的缩放处理(防内存溢出) |--多媒体应用设计图 |--多线程下载 |--多线程下载及断点续传 |--多线程之AsyncTask的...

    PowerPoint.2007宝典 3/10

    11.7 将SmartArt图形保存为图片 235 11.8 小结 236 第12章 使用和组织剪贴画 237 12.1 选择适当的剪贴画 237 12.2 关于剪辑管理器 238 12.3 在幻灯片中插入剪贴画 238 12.4 剪贴画搜索方法 239 12.4.1...

    PowerPoint.2007宝典 10/10

    11.7 将SmartArt图形保存为图片 235 11.8 小结 236 第12章 使用和组织剪贴画 237 12.1 选择适当的剪贴画 237 12.2 关于剪辑管理器 238 12.3 在幻灯片中插入剪贴画 238 12.4 剪贴画搜索方法 239 12.4.1...

Global site tag (gtag.js) - Google Analytics