ImageOperate.java
上传用户:u_thks
上传日期:2022-07-31
资源大小:1910k
文件大小:9k
源码类别:

WEB源码(ASP,PHP,...)

开发平台:

Java

  1. /*
  2.  *  向指定的图片上写字,生成图片缩略图等。
  3.  *  Made In GamVan
  4.  */
  5. package com.gamvan.image;
  6. import java.awt.Color;
  7. import java.awt.Font;
  8. import java.awt.Graphics;
  9. import java.awt.Image;
  10. import java.awt.image.BufferedImage;
  11. import java.io.File;
  12. import java.io.FileOutputStream;
  13. import com.gamvan.tools.Arith;
  14. import com.sun.image.codec.jpeg.JPEGCodec;
  15. import com.sun.image.codec.jpeg.JPEGImageEncoder;
  16. // 缩略图
  17. public class ImageOperate { 
  18.     Image img1;
  19.     String message = "";
  20.     String filePath = ""; //文件所在的根目录, 绝对路径。
  21.     String waterImg1 = "", waterImg2=""; //水印图片文件名
  22.     String waterPath = ""; //水印图片所在路径,绝对路径
  23.     String str = new String("www.GamVan.com");
  24.     
  25.     
  26.     
  27.     /**
  28.      * 给图片加水印
  29.      * @param oldFile 加水印前的文件名. 
  30.      * @param newFile 加水印后的文件名。
  31.      * @return
  32.      */
  33.     public void waterImage(String oldFile, String newFile){
  34.         filePath = filePath.replace("\","\\");
  35.         filePath += "\\";
  36.          try{
  37.             File myFile = new File(filePath + oldFile); //指定文件名含路径
  38.             Image src = javax.imageio.ImageIO.read(myFile); //构造Image对象 
  39.             int w=src.getWidth(null); //得到源图宽  
  40.             int h=src.getHeight(null); //得到源图长
  41.             Graphics gim = src.getGraphics();
  42.             BufferedImage tag = new BufferedImage(w,h,BufferedImage.TYPE_INT_RGB);  
  43.             tag.getGraphics().drawImage(src,0,0,w,h,null);
  44.             if(!waterImg1.equals("") && waterImg2.equals("")){
  45.                 Image img1 = javax.imageio.ImageIO.read(new File(waterPath+waterImg1));//构造Image对象 
  46.                 int w1 = img1.getWidth(null); //得到源图宽  
  47.                 int h1 = img1.getHeight(null); //得到源图长
  48.                 tag.getGraphics().drawImage(img1,w-w1-12,h-36,w1,h1,null);
  49.             }
  50.             if(!waterImg1.equals("") && !waterImg2.equals("")){
  51.                 Image img1 = javax.imageio.ImageIO.read(new File(waterPath+waterImg1));//构造Image对象 
  52.                 int w1 = img1.getWidth(null); //得到源图宽  
  53.                 int h1 = img1.getHeight(null); //得到源图长
  54.                 Image img2 = javax.imageio.ImageIO.read(new File(waterPath+waterImg2));//构造Image对象 
  55.                     int w2 = img2.getWidth(null); //得到源图宽  
  56.                     int h2 = img2.getHeight(null); //得到源图长       
  57.                     tag.getGraphics().drawImage(img2,w-w2-12,h-36,w2,h2,null);
  58.                     tag.getGraphics().drawImage(img1,w-w1-w2-16,h-36,w1,h1,null);
  59.             }
  60.             FileOutputStream out=new FileOutputStream(filePath + newFile); //输出到文件流  
  61.             JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);   
  62.             encoder.encode(tag); //JPEG编码 
  63.             gim.dispose();
  64.             out.close();      
  65.          }catch(Exception e){
  66.              message = waterPath + e.toString() + filePath;
  67.          }    
  68.     }
  69.     
  70.     /**
  71.      * 往图片上写字
  72.      * @param oldFile
  73.      * @param newFile
  74.      * @return
  75.      */
  76.     public void writeImage(String oldFile, String newFile, String fontFamily, int fontSize){
  77.         filePath = filePath.replace("\","\\");
  78.         filePath += "\\";
  79.         //设置字体
  80.         if(fontFamily.trim().equals("")){
  81.             fontFamily = "Tahoma";
  82.         }
  83.         if(fontSize<=0){
  84.             fontSize = 12;
  85.         }
  86.         try{
  87.             File myFile = new File(filePath + oldFile); //指定文件名含路径
  88.             Image src = javax.imageio.ImageIO.read(myFile); //构造Image对象 
  89.             int w=src.getWidth(null); //得到源图宽  
  90.             int h=src.getHeight(null); //得到源图长
  91.             //在你创立的image上写字
  92.             Graphics gim = src.getGraphics();
  93.             Font font = new Font(fontFamily, Font.BOLD, fontSize);
  94.             gim.setFont(font);            
  95.             gim.setColor(Color.black);
  96.             
  97.             gim.drawString(str, w-(str.length()*10-1), h-12);
  98.             
  99.             gim.setColor(Color.lightGray);
  100.             gim.drawString(str, w-(str.length()*10-0), h-13);
  101.             BufferedImage tag = new BufferedImage(w,h,BufferedImage.TYPE_INT_RGB); 
  102.             
  103.             tag.getGraphics().drawImage(src,0,0,w,h,null);
  104.             FileOutputStream out=new FileOutputStream(filePath + newFile); //输出到文件流  
  105.             JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);   
  106.             encoder.encode(tag); //JPEG编码 
  107.             gim.dispose();
  108.             out.close();  
  109.         }catch(Exception e){
  110.             message = e.toString();
  111.         }
  112.     } 
  113.     
  114.     /**
  115.      * 图片缩略图
  116.      * @param w
  117.      * @param h
  118.      * @param oldFile
  119.      * @param newFile
  120.      * @throws Exception
  121.      * @return
  122.      */
  123.     public String shrinkImage(int w, int h, String oldFile, String newFile) {
  124.         String str = ""; //返回文件名
  125.         filePath = filePath.replace("\","\\");
  126.         filePath += "\\";
  127.         double wd = 0;
  128.         double hd = 0;
  129.         String ws = "", hs = "";
  130.         try{
  131.             File myFile = new File(filePath + oldFile); //指定文件名含路径
  132.             Image src = javax.imageio.ImageIO.read(myFile); //构造Image对象  
  133.             int width=src.getWidth(null); //得到源图宽  
  134.             int height=src.getHeight(null); //得到源图长
  135.             if((w>0 && h==0) && w < width){
  136.                 // 计算出宽度的缩放比例。
  137.                 wd = Arith.div(Double.parseDouble(String.valueOf(w)),Double.parseDouble(String.valueOf(width)),10);
  138.                 
  139.                 hd = Arith.mul(wd,Double.parseDouble(String.valueOf(height)));
  140.                 hd = Arith.round(hd,0); //四舍五入保留小数点0位
  141.                 hs = String.valueOf(hd);
  142.                 hs = hs.substring(0, hs.indexOf("."));
  143.                 
  144.                 h = Integer.parseInt(hs) ; //按比例缩小高度
  145.                 if(h<1){
  146.                     h = height;
  147.                 }
  148.             }
  149.             else if((h > 0 && w == 0) && h < height){
  150.                 // 计算出高度的缩放比例。
  151.                 hd = Arith.div(Double.parseDouble(String.valueOf(h)),Double.parseDouble(String.valueOf(height)),10);
  152.                 wd = Arith.mul(hd,Double.parseDouble(String.valueOf(width)));
  153.                 wd = Arith.round(wd,0); //四舍五入保留小数点0位
  154.                 ws = String.valueOf(wd);
  155.                 ws = ws.substring(0, ws.indexOf("."));
  156.                 w = Integer.parseInt(ws) ; //按比例缩小高度
  157.                 if(w<1){
  158.                     w = width;
  159.                 }
  160.             }
  161.             else if((w>0 && h>0)){
  162.                 
  163.             }
  164.             else{
  165.                 w = width;
  166.                 h = height;
  167.             }
  168.             //同时指定宽高
  169.             if(w > width){
  170.                 w =width-1;
  171.             }
  172.             if(h > height){
  173.                 h = height-1;
  174.             }  
  175.             if(w<1){
  176.                 w = width;
  177.             }
  178.             if(h<1){
  179.                 h = height;
  180.             }
  181.             java.awt.image.BufferedImage tag = new BufferedImage(w,h,BufferedImage.TYPE_INT_RGB);  
  182.             tag.getGraphics().drawImage(src,0,0,w,h,null); //绘制缩小后的图  
  183.             FileOutputStream out=new FileOutputStream(filePath + newFile); //输出到文件流  
  184.             JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);   
  185.             encoder.encode(tag); //JPEG编码 
  186.             out.close();  
  187.             str = newFile;
  188.         }catch(Exception e){
  189.             str = "";
  190.             message = e.toString();
  191.         }
  192.         return str;
  193.     }
  194.     
  195.     
  196.     
  197.     
  198.     public String getMessage(){
  199.         return this.message;
  200.     }
  201.     public void setFilePath(String filePath){
  202.         if(filePath!=null){
  203.             this.filePath = filePath;
  204.         }else{
  205.             this.filePath = "";
  206.         }
  207.     }
  208.     public void setStr(String str){
  209.         if(str!=null){
  210.             this.str = str;
  211.         }else{
  212.             this.str = "club.GamVan.com";
  213.         }
  214.     }
  215.     public void setWaterImg1(String str){
  216.         if(str!=null){
  217.             this.waterImg1 = str;
  218.         }else{
  219.             this.waterImg1 = "";
  220.         }
  221.     }
  222.     public void setWaterImg2(String str){
  223.         if(str!=null){
  224.             this.waterImg2 = str;
  225.         }else{
  226.             this.waterImg2 = "";
  227.         }
  228.     }  
  229.     public void setWaterPath(String str){
  230.         if(str!=null){
  231.             this.waterPath = str;
  232.         }else{
  233.             this.waterPath = "";
  234.         }
  235.     } 
  236.     
  237.     
  238. }