图片改变大小加水印加文字

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();
  }
 }
}


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值