`
edwin492
  • 浏览: 112914 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

java比例缩放图片

    博客分类:
  • J2SE
阅读更多

web中获取input file中的完整地址

 

if (window.navigator.userAgent.indexOf("MSIE") >= 1) {   
	obj.select();//obj为file的js对象
	return document.selection.createRange().text;       
}  

  firefox中obj.files.item(0).getAsDataURL();获取完整路径。

 

下面为后台java对图片进行缩放及类型判定,其中gif图片缩放需用到gif4j。

 

public class GrapicDemo {
	
	public void resizeImage(String path){
		File file = new File(path);
		if("gif".equals(getGraphicType(path))){
			try {
				GifImage gif = GifDecoder.decode(file);
				File des = new File("F:\\WORKSPACE4\\Demo\\WebRoot\\img\\jiao2.gif");//目标
				GifImage newImage =  GifTransformer.resize(gif, 100, 100, true);
				GifEncoder.encode(newImage, des);
			} catch (IOException e) {
				e.printStackTrace();   
			}
		}else{
			try {
				Image  image = ImageIO.read(file);
				BufferedImage image2 = new BufferedImage(320, image.getHeight(null)*320/image.getWidth(null), BufferedImage.TYPE_INT_RGB);
				image2.getGraphics().drawImage(image.getScaledInstance(320, image.getHeight(null)*320/image.getWidth(null), Image.SCALE_SMOOTH), 0, 0, null);
				FileOutputStream fos = new FileOutputStream("F:\\WORKSPACE4\\Demo\\WebRoot\\img\\flower2.png");
				JPEGImageEncoder decoder = JPEGCodec.createJPEGEncoder(fos);
				decoder.encode(image2);
				fos.close();
			} catch (IOException e) {
				e.printStackTrace();   
			}
		}
	}
	
	public String getGraphicType(String path){
		try {
			FileInputStream fis = new FileInputStream(path);
			BufferedInputStream bis = new BufferedInputStream(fis);
			int len = fis.available();
			byte[] b =new byte[len];
			bis.read(b, 0, len);
			ByteArrayInputStream bab = new ByteArrayInputStream(b);
			MemoryCacheImageInputStream mis = new MemoryCacheImageInputStream(bab);
			Iterator i = ImageIO.getImageReaders(mis);
			while(i.hasNext()){  
				ImageReader ir = (ImageReader) i.next();
				if(ir instanceof GIFImageReader){
					return "gif";
				}else if(ir instanceof PNGImageReader){
					return "png";
				}else if(ir instanceof BMPImageReader){
					return "bmp";
				}else if(ir instanceof JPEGImageReader){
					return "jpg";
				}
			}
		} catch (Exception e) {
			e.printStackTrace();   
		}
		return null;
	}
	public static void main(String[] args){
		GrapicDemo gd = new GrapicDemo();
		gd.resizeImage("F:\\WORKSPACE4\\Demo\\WebRoot\\img\\jiao.gif");
	}
}

 引用:

解决IEimg.onload失效的方法

    最近在做web开发,其中有一个需求:利用Javascript获取要加载的图片的尺寸,所以很自然的,我就想到了imgonload方法,在firefox下开发完成后,我到IE下调试,发现imgonload事件很多情况下都不被调用。

我最初的代码如下:

var img = new Image;
img.src = "test.gif";
img.onload = 
function(){
    alert ( img.width );
};


    这段代码看着没什么问题,但是为什么onload没有被IE调用呢?因为IE会缓存图片,第2次加载的图片,不是从服务器上传过来的,而是从缓冲区里加载的。是不是从缓冲区里加载的图片就不触发onload事件呢?我于是我测试了以下代码,成功了~

var img = new Image;
img.onload = 
function(){
    alert ( img.width );
};
img.src = "test.gif";


    我把onload写到前面去,先告诉浏览器如何处理这张图片,再指定这张图片的源,这样就正常了。所以,不是IE没有触发onload事件,而是因为加载缓冲区的速度太快,以至于没有运行到img.onload的时候,onload事件已经触发了。这让我想到了Ajax,我们在写xmlhttp的时候,都是先指定onstatechange的回调函数,然后再send数据的,道理是一样的。

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics