缩略图片

package  utils;

import  java.awt.Image;

import  java.awt.image.BufferedImage;
import  java.awt.image.RenderedImage;
import  java.io.File;
import  java.io.OutputStream;
import  java.io.IOException;
import  javax.imageio.ImageIO;

import  com.sun.image.codec.jpeg.JPEGCodec;
import  com.sun.image.codec.jpeg.JPEGEncodeParam;
import  com.sun.image.codec.jpeg.JPEGImageEncoder;

public   class  Photo {

    
public   static   void  reduceImg(OutputStream out, String path,  int  width,  int  height) {
        
try  {
            File srcfile 
=   new  File(path);
            
if  ( ! srcfile.exists()) {
                System.out.println(
" 缩放图片文件不存在! " );
                
return ;
            }
            BufferedImage src 
=  ImageIO.read(srcfile);

            
//  得到原始宽和高
             int  w  =  src.getWidth();
            
int  h  =  src.getHeight();
            
double  sx  =  ( double ) width  /  w;
            
double  sy  =  ( double ) height  /  h;
            
if  (sx  <  sy) {
                sy 
=  sx;
                height 
=  ( int ) (sy  *  h);
            } 
else  {
                sx 
=  sy;
                width 
=  ( int ) (sy  *  w);
            }
            System.out.println(String.format(
" %s, %s " , w, h));
            System.out.println(String.format(
" %s, %s " , width, height));

            BufferedImage source 
=   new  BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
            
//  Image.SCALE_SMOOTH 的缩略算法 生成缩略图片的平滑度的 优先级比速度高 生成的图片质量比较好 但速度慢
            source.getGraphics().drawImage(
                    src.getScaledInstance(width, height, Image.SCALE_SMOOTH), 
0 0 null );
            JPEGImageEncoder encoder 
=  JPEGCodec.createJPEGEncoder(out);
            JPEGEncodeParam param 
=  encoder.getDefaultJPEGEncodeParam(source);
            param.setQuality(70f, 
true );
            encoder.encode(source, param);
        } 
catch  (IOException ex) {
            ex.printStackTrace();
        }
    }

    
/**
     * 根据图片路径 读取图片文件
     * 
     * 
@param  fileName
     * 
@return
     
*/
    
public   static  BufferedImage readImage(String fileName) {
        BufferedImage bi 
=   null ;
        
try  {
            bi 
=  ImageIO.read( new  File(fileName));
        } 
catch  (IOException ioe) {
            ioe.printStackTrace();
        }
        
return  bi;
    }

    
/**
     * 生成新的图片文件
     * 
     * 
@param  im
     * 
@param  formatName
     * 
@param  fileName
     * 
@return
     
*/
    
public   static   boolean  writeImage(RenderedImage im, String formatName, String fileName) {
        
boolean  result  =   false ;
        
try  {
            result 
=  ImageIO.write(im, formatName,  new  File(fileName));
        } 
catch  (IOException ioe) {
            ioe.printStackTrace();
        }
        
return  result;
    }

    
/**
     * 转换图片格式 到 jpg
     * 
     * 
@param  im
     * 
@param  fileName
     * 
@return
     
*/
    
public   static   boolean  writeJPEGImage(RenderedImage im, String fileName) {
        
return  writeImage(im,  " JPEG " , fileName);
    }

    
/**
     * 转换图片格式 到 gif 不知到好用不
     * 
     * 
@param  im
     * 
@param  fileName
     * 
@return
     
*/
    
public   static   boolean  writeGIFImage(RenderedImage im, String fileName) {
        
return  writeImage(im,  " GIF " , fileName);
    }

    
public   static   boolean  writePNGImage(RenderedImage im, String fileName) {
        
return  writeImage(im,  " PNG " , fileName);
    }

    
public   static   boolean  writeBMPImage(RenderedImage im, String fileName) {
        
return  writeImage(im,  " BMP " , fileName);
    }
}
调用:
ContractedBlock.gif ExpandedBlockStart.gif Code
<%@ page language="java" pageEncoding="utf-8"%>
<%@ page import="utils.Photo"%>
<%@ page import="java.io.OutputStream"%>
<%
response.setHeader(
"Pragma""no-cache");
response.setHeader(
"Cache-Control""no-cache");
response.setDateHeader(
"Expires"0);
response.setContentType(
"image/jpeg");
String path 
= this.getServletContext().getRealPath("images/photo1.jpg");
OutputStream outputStream 
= response.getOutputStream();
Photo.reduceImg(outputStream, path, 
300300);
outputStream.close();
out.clear();
out 
= pageContext.pushBody();
%>

转载于:https://www.cnblogs.com/angushine/archive/2009/03/21/1418671.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值