package com.lss.common.file.image; import java.awt.*; import java.awt.image.*; import javax.imageio.ImageIO; import javax.imageio.IIOException; import java.io.*; import com.sun.image.codec.jpeg.JPEGCodec; import com.sun.image.codec.jpeg.JPEGImageEncoder; /** * 图片改变大小加水印加文字 * * @author SHOUSHEN LUAN * @datetime Aug 25, 20123:13:01 PM * */ public class ImageOperate { public static void main(String[] args) { new ImageOperate().waterMark("/source.jpg", "/suiyin.jpg"); new ImageOperate().modifyImageSize("/source.jpg", "/lss.jpg", 100, 200); new ImageOperate().imageAddFont("D:\\image/source.jpg", "D:\\image/addFont.png", "图片增加文字效果图"); } /** * 给图片加水印,但不改变大小 * * @param strOriginalFileName * String(原始文件) * @param strWaterMarkFileName * String(水印后) */ public void waterMark(String strOriginalFileName, String strWaterMarkFileName) { try { // 源文件 String root = "D:\\image"; // session.getServletContext().getRealPath("/"); File fileOriginal = new File(root + strOriginalFileName); Image imageOriginal = ImageIO.read(fileOriginal); int widthOriginal = imageOriginal.getWidth(null); int heightOriginal = imageOriginal.getHeight(null); BufferedImage bufImage = new BufferedImage(widthOriginal, heightOriginal, BufferedImage.TYPE_INT_RGB); Graphics g = bufImage.createGraphics(); g.drawImage(imageOriginal, 0, 0, widthOriginal, heightOriginal, null); // 水印文件 File fileWaterMark = new File(root + strWaterMarkFileName); Image imageWaterMark = ImageIO.read(fileWaterMark); int widthWaterMark = imageWaterMark.getWidth(null); int heightWaterMark = imageWaterMark.getHeight(null); // 水印文件在源文件的右下角 g.drawImage(imageWaterMark, widthOriginal - widthWaterMark, heightOriginal - heightWaterMark, widthWaterMark, heightWaterMark, null); g.dispose(); String newFile = root + strOriginalFileName; int index = newFile.lastIndexOf("."); newFile = newFile.substring(0, index) + "_x_" + newFile.substring(index); FileOutputStream fos = new FileOutputStream(newFile); JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(fos); encoder.encode(bufImage); fos.flush(); fos.close(); fos = null; } catch (Exception e) { e.printStackTrace(); } } /** * 给图片增加文字,画线,话3D方框 * * @param sourceImage * @param targetImage * @param str */ public void imageAddFont(String sourceImage, String targetImage, String str) { try { File fileOriginal = new File(sourceImage); Image imageOriginal = ImageIO.read(fileOriginal); int widthOriginal = imageOriginal.getWidth(null); int heightOriginal = imageOriginal.getHeight(null); BufferedImage bufImage = new BufferedImage(widthOriginal, heightOriginal, BufferedImage.TYPE_INT_RGB); Graphics g = bufImage.createGraphics(); g.drawImage(imageOriginal, 0, 0, widthOriginal, heightOriginal, null); g.setColor(Color.RED); g.drawString(str, 15, 15); g.setFont(Font.getFont("新宋体")); g.drawLine(10, 10, 100, 200); g.draw3DRect(10, 10, widthOriginal - 30, heightOriginal - 30, false); g.dispose(); FileOutputStream fos = new FileOutputStream(targetImage); JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(fos); encoder.encode(bufImage); fos.flush(); fos.close(); fos = null; } catch (Exception e) { e.printStackTrace(); } } /** * 修改图片大小 */ public void modifyImageSize(String srcImgFile, String newImageFile, int new_w, int new_h) { String root = "D:\\image"; File file = new File(root + srcImgFile); Image src = null; try { src = javax.imageio.ImageIO.read(file); java.awt.image.BufferedImage tag = new java.awt.image.BufferedImage(new_w, new_h, java.awt.image.BufferedImage.TYPE_INT_RGB); tag.getGraphics().drawImage(src, 0, 0, new_w, new_h, null); FileOutputStream newimage = new FileOutputStream(root + newImageFile); JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(newimage); encoder.encode(tag); // 近JPEG编码 newimage.close(); } catch (IIOException ee) { ee.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } } }