首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

java制造图片的缩略图

2012-12-23 
java制作图片的缩略图package com.mxo9.b2c.service.administration.impl.goodstrading.goodsimport java

java制作图片的缩略图

package com.mxo9.b2c.service.administration.impl.goodstrading.goods;import java.applet.Applet;import java.awt.Color;import java.awt.Graphics;import java.awt.Graphics2D;import java.awt.Image;import java.awt.MediaTracker;import java.awt.image.BufferedImage;import java.awt.image.ConvolveOp;import java.awt.image.Kernel;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import javax.imageio.ImageIO;import com.sun.image.codec.jpeg.JPEGCodec;import com.sun.image.codec.jpeg.JPEGImageEncoder;public class AlterUploadImage {String inputDir; //源图片的绝对路径,不包含图片的文件名String outputDir; //目标图片的绝对路径,不包含图片的文件名String inputFileName; //源图片文件名String outputFileName; //目标图片的文件名int outputWidth; //目标图片的宽int outputHeight; //目标图片的高boolean proportion = true; //是否等比例缩放private String inputFileUrl;//源图片的绝对路径,包含文件名private String outputFileUrl;//目标图片的绝对路径,包含文件名private String tempUrl;/** * 初始化修改图片大小的参数 * @param inputDir 源图片的绝对路径,不包含图片的文件名 * @param outputDir 目标图片的绝对路径,不包含图片的文件名 * @param inputFileName 源图片文件名 * @param outputFileName 目标图片的文件名 * @param outputWidth 目标图片的宽 * @param outputHeight 目标图片的高 * @param proportion 是否等比例缩放 */public AlterUploadImage(String inputDir, String outputDir,String inputFileName, String outputFileName, int outputWidth,int outputHeight, boolean proportion) {this.inputDir=inputDir;this.outputDir=outputDir;this.inputFileName= inputFileName;this.outputFileName=outputFileName;this.outputWidth=outputWidth;this.outputHeight=outputHeight;this.proportion=proportion;}public AlterUploadImage() {inputDir="";outputDir="";inputFileName="";outputFileName="";outputWidth=100;outputHeight=100;proportion=true;}public boolean alterImageSize() throws IOException {//构造源、目标图片的路径inputFileUrl=inputDir+inputFileName;outputFileUrl=outputDir+outputFileName;createDir(outputDir);try {         Image image = javax.imageio.ImageIO.read(new File(inputFileUrl));         int imageWidth = image.getWidth(null);         int imageHeight = image.getHeight(null);         float scale = getRatio(imageWidth,imageHeight,outputWidth,outputHeight);         imageWidth = (int)(scale*imageWidth);         imageHeight = (int)(scale*imageHeight);                  image = image.getScaledInstance(imageWidth, imageHeight, Image.SCALE_AREA_AVERAGING);         // Make a BufferedImage from the Image.         BufferedImage mBufferedImage = new BufferedImage(imageWidth, imageHeight,BufferedImage.TYPE_INT_RGB);         Graphics2D g2 = mBufferedImage.createGraphics();        g2.drawImage(image, 0, 0,imageWidth, imageHeight, Color.white,null);         g2.dispose();                  float[] kernelData2 = {-0.125f,-0.125f,-0.125f,-0.125f,2,-0.125f,-0.125f,-0.125f,-0.125f};         Kernel kernel = new Kernel(3, 3, kernelData2);         ConvolveOp cOp = new ConvolveOp(kernel, ConvolveOp.EDGE_NO_OP, null);         mBufferedImage = cOp.filter(mBufferedImage, null);         FileOutputStream out = new FileOutputStream(outputFileUrl);        JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);         encoder.encode(mBufferedImage);         out.close();         return true;    }catch (Exception ioe){     return false;    }    finally{    } //return ThumbnailUtil.creatThumbnail(inputFileUrl, outputFileUrl, outputWidth, outputHeight);//File fileOut = new File(tempUrl);//File fileIn = new File(inputFileUrl);//FileOutputStream tempout = null;//try {//tempout = new FileOutputStream(fileOut);//} catch (Exception ex) {//System.out.println(ex.toString());//}//Image img = null;//Applet app = new Applet();//MediaTracker mt = new MediaTracker(app);//try {//img = javax.imageio.ImageIO.read(fileIn);//mt.addImage(img, 0);//mt.waitForID(0);//} catch (Exception e) {//e.printStackTrace();//}//if (img.getWidth(null) == -1) {//return false;//} else {//int new_w;//int new_h;//if (this.proportion == true) {//判断是否等比例缩放////计算比率//double rate1 = ((double) img.getWidth(null)) / (double) outputWidth + 0.1;//double rate2 = ((double) img.getHeight(null)) / (double) outputHeight + 0.1;//double rate = rate1 > rate2 ? rate1 : rate2;//new_w = (int) (((double) img.getWidth(null)) / rate);//new_h = (int) (((double) img.getHeight(null)) / rate);//} else {//new_w = outputWidth; //宽//new_h = outputHeight; //高//}//BufferedImage buffImg = new BufferedImage(new_w, new_h,//BufferedImage.TYPE_INT_RGB);////Graphics g = buffImg.createGraphics();////g.setColor(Color.white);//g.fillRect(0, 0, new_w, new_h);////g.drawImage(img, 0, 0, new_w, new_h, null);//g.dispose();//JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(tempout);//try {//encoder.encode(buffImg);//tempout.close();//} catch (IOException ex) {//System.out.println(ex.toString());//}//}//createThumbImg(outputWidth,outputHeight);//fileOut.delete();//return true;}public static float getRatio(int width,int height,int maxWidth,int maxHeight){     float Ratio = 1.0f;     float widthRatio ;     float heightRatio ;     widthRatio = (float)maxWidth/width;     heightRatio = (float)maxHeight/height;     if(widthRatio<1.0 || heightRatio<1.0){       Ratio = widthRatio<=heightRatio?widthRatio:heightRatio;     }     return Ratio;   }//文亮,2009/07/15public boolean alterImageSizeForFriendLink() throws IOException {//构造源、目标图片的路径inputFileUrl=inputDir+inputFileName;outputFileUrl=outputDir+outputFileName;tempUrl=outputDir+outputFileName;createDir(tempUrl);File fileOut = new File(tempUrl);File fileIn = new File(inputFileUrl);FileOutputStream tempout = null;try {tempout = new FileOutputStream(fileOut);} catch (Exception ex) {System.out.println(ex.toString());}Image img = null;Applet app = new Applet();MediaTracker mt = new MediaTracker(app);try {img = javax.imageio.ImageIO.read(fileIn);mt.addImage(img, 0);mt.waitForID(0);} catch (Exception e) {e.printStackTrace();}if (img.getWidth(null) == -1) {return false;} else {int new_w;int new_h;if (this.proportion == true) {//判断是否等比例缩放//计算比率double rate1 = ((double) img.getWidth(null)) / (double) outputWidth + 0.1;double rate2 = ((double) img.getHeight(null)) / (double) outputHeight + 0.1;double rate = rate1 > rate2 ? rate1 : rate2;new_w = (int) (((double) img.getWidth(null)) / rate);new_h = (int) (((double) img.getHeight(null)) / rate);} else {new_w = outputWidth; //宽new_h = outputHeight; //高}BufferedImage buffImg = new BufferedImage(new_w, new_h,BufferedImage.TYPE_INT_RGB);Graphics g = buffImg.createGraphics();//g.setColor(Color.white);g.fillRect(0, 0, new_w, new_h);g.drawImage(img, 0, 0, new_w, new_h, null);g.dispose();JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(tempout);try {encoder.encode(buffImg);tempout.close();} catch (IOException ex) {System.out.println(ex.toString());}}return true;}//文亮,2009/07/15,图片批量处理public boolean alterImageSizeForPicBatch() throws IOException {//构造源、目标图片的路径inputFileUrl=inputDir+inputFileName;outputFileUrl=outputDir+outputFileName;tempUrl=outputDir+"temp"+outputFileName;createDir(tempUrl);File fileOut = new File(tempUrl);File fileIn = new File(inputFileUrl);FileOutputStream tempout = null;try {tempout = new FileOutputStream(fileOut);} catch (Exception ex) {System.out.println(ex.toString());}Image img = null;Applet app = new Applet();MediaTracker mt = new MediaTracker(app);try {img = javax.imageio.ImageIO.read(fileIn);mt.addImage(img, 0);mt.waitForID(0);} catch (Exception e) {e.printStackTrace();}if (img.getWidth(null) == -1) {return false;} else {int new_w;int new_h;if (this.proportion == true) {//判断是否等比例缩放//计算比率double rate1 = ((double) img.getWidth(null)) / (double) outputWidth + 0.1;double rate2 = ((double) img.getHeight(null)) / (double) outputHeight + 0.1;double rate = rate1 > rate2 ? rate1 : rate2;new_w = (int) (((double) img.getWidth(null)) / rate);new_h = (int) (((double) img.getHeight(null)) / rate);} else {new_w = outputWidth; //宽new_h = outputHeight; //高}BufferedImage buffImg = new BufferedImage(new_w, new_h,BufferedImage.TYPE_INT_RGB);Graphics g = buffImg.createGraphics();g.setColor(Color.white);g.fillRect(0, 0, new_w, new_h);g.drawImage(img, 0, 0, new_w, new_h, null);g.dispose();JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(tempout);try {encoder.encode(buffImg);tempout.close();} catch (IOException ex) {System.out.println(ex.toString());}}//createThumbImg(outputWidth,outputHeight);//fileOut.delete();return true;}/** * 该方法用于对生成的图片进一步处理,处理的要求就是创建一个高度为参数outputHeight宽度为outputWidth的图像,其背景色为白色,然后将生成的图片放在该图像的中央 * 以创建一张新图片 * @param width 新图片的宽度 * @param height 新图片的高度 * @throws IOException */public void createThumbImg(int width,int height) throws IOException{int startX=0;int startY=0;int[] ImageArrayOne=new int[width*height];    for(int i=0;i<ImageArrayOne.length;i++){    ImageArrayOne[i]=Color.WHITE.getRGB();    }//对第二张图片做相同的处理        File fileTwo = new File(tempUrl);        BufferedImage ImageTwo = ImageIO.read(fileTwo);        int imgWidth = ImageTwo.getWidth();//图片宽度        int imgHeight = ImageTwo.getHeight();//图片高度        int[] ImageArray = new int[imgWidth*imgHeight];        ImageArray = ImageTwo.getRGB(0,0,imgWidth,imgHeight,ImageArray,0,imgWidth);startX=(width-imgWidth)/2;        startY=(height-imgHeight)/2;        //生成新图片        BufferedImage ImageNew = new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);        ImageNew.setRGB(0,0,width,height,ImageArrayOne,0,width);//设置背景色为白色        ImageNew.setRGB(startX,startY,imgWidth,imgHeight,ImageArray,0,imgWidth);//将缩略图置于最上面        File outFile = new File(outputFileUrl);        ImageIO.write(ImageNew, outputFileUrl.substring(outputFileUrl.lastIndexOf(".")+1), outFile);//写图片}private void createDir(String path){String realPath;try{realPath=path.substring(0,path.lastIndexOf("/"));}catch(Exception e){realPath=path.substring(0,path.lastIndexOf("\"));}File dir=new File(realPath);dir.mkdirs();}public String getInputDir() {return inputDir;}public void setInputDir(String inputDir) {this.inputDir = inputDir;}public String getOutputDir() {return outputDir;}public void setOutputDir(String outputDir) {this.outputDir = outputDir;}public String getInputFileName() {return inputFileName;}public void setInputFileName(String inputFileName) {this.inputFileName = inputFileName;}public String getOutputFileName() {return outputFileName;}public void setOutputFileName(String outputFileName) {this.outputFileName = outputFileName;}public int getOutputWidth() {return outputWidth;}public void setOutputWidth(int outputWidth) {this.outputWidth = outputWidth;}public int getOutputHeight() {return outputHeight;}public void setOutputHeight(int outputHeight) {this.outputHeight = outputHeight;}public boolean isProportion() {return proportion;}public void setProportion(boolean proportion) {this.proportion = proportion;}public String getInputFileUrl() {return inputFileUrl;}public void setInputFileUrl(String inputFileUrl) {this.inputFileUrl = inputFileUrl;}public String getOutputFileUrl() {return outputFileUrl;}public void setOutputFileUrl(String outputFileUrl) {this.outputFileUrl = outputFileUrl;}}

?

热点排行