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

java处置图片 添加文字或图片水印并可生成缩略图

2012-09-06 
java处理图片 添加文字或图片水印并可生成缩略图ImageHelper.javapackage com.test1433import java.awt.A

java处理图片 添加文字或图片水印并可生成缩略图

ImageHelper.java

package com.test1433;import java.awt.AlphaComposite;import java.awt.Color;import java.awt.Font;import java.awt.Graphics2D;import java.awt.Image;import java.awt.RenderingHints;import java.awt.geom.AffineTransform;import java.awt.image.BufferedImage;import java.awt.image.ColorModel;import java.awt.image.WritableRaster;import java.io.File;import java.io.FileOutputStream;import javax.imageio.ImageIO;import com.sun.image.codec.jpeg.JPEGCodec;import com.sun.image.codec.jpeg.JPEGImageEncoder; public class ImageHelper { /** * 生成缩略图 <br/>保存:ImageIO.write(BufferedImage, imgType[jpg/png/...], File); * * @param source *            原图片 * @param width *            缩略图宽 * @param height *            缩略图高 * @param b *            是否等比缩放 * */public static BufferedImage Thumb(BufferedImage source, int width,        int height, boolean b) {// targetW,targetH分别表示目标长和宽                int type = source.getType();                BufferedImage target = null;                double sx = (double) width / source.getWidth();                double sy = (double) height / source.getHeight();                 if (b) {                        if (sx > sy) {                                sx = sy;                                width = (int) (sx * source.getWidth());                        } else {                                sy = sx;                                height = (int) (sy * source.getHeight());                        }                }                                 if (type == BufferedImage.TYPE_CUSTOM) { // handmade        ColorModel cm = source.getColorModel();        WritableRaster raster = cm.createCompatibleWritableRaster(width,                        height);        boolean alphaPremultiplied = cm.isAlphaPremultiplied();        target = new BufferedImage(cm, raster, alphaPremultiplied, null);                } else        target = new BufferedImage(width, height, type);                Graphics2D g = target.createGraphics();// smoother than exlax:        g.setRenderingHint(RenderingHints.KEY_RENDERING,                        RenderingHints.VALUE_RENDER_QUALITY);        g.drawRenderedImage(source, AffineTransform.getScaleInstance(sx, sy));        g.dispose();        return target;        }         /** * 图片水印 * * @param imgPath *            待处理图片 * @param markPath *            水印图片 * @param x *            水印位于图片左上角的 x 坐标值 * @param y *            水印位于图片左上角的 y 坐标值 * @param alpha *            水印透明度 0.1f ~ 1.0f * */public static void waterMark(String imgPath, String markPath, int x, int y,                float alpha) {try {        // 加载待处理图片文件             Image img = ImageIO.read(new File(imgPath));              BufferedImage image = new BufferedImage(img.getWidth(null), img                                        .getHeight(null), BufferedImage.TYPE_INT_RGB);             Graphics2D g = image.createGraphics();             g.drawImage(img, 0, 0, null);              // 加载水印图片文件             Image src_biao = ImageIO.read(new File(markPath));             g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP,             alpha));             g.drawImage(src_biao, x, y, null);                        g.dispose();         // 保存处理后的文件        FileOutputStream out = new FileOutputStream(imgPath);        JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);        encoder.encode(image);        out.close();        } catch (Exception e) {                e.printStackTrace();        }}         /** * 文字水印 * * @param imgPath *            待处理图片 * @param text *            水印文字 * @param font *            水印字体信息 * @param color *            水印字体颜色 * @param x *            水印位于图片左上角的 x 坐标值 * @param y *            水印位于图片左上角的 y 坐标值 * @param alpha *            水印透明度 0.1f ~ 1.0f */ public static void textMark(String imgPath, String text, Font font,                Color color, int x, int y, float alpha) {        try {    Font Dfont = (font == null) ? new Font("宋体", 20, 13) : font;     Image img = ImageIO.read(new File(imgPath));     BufferedImage image = new BufferedImage(img.getWidth(null), img                                        .getHeight(null), BufferedImage.TYPE_INT_RGB);    Graphics2D g = image.createGraphics();    g.drawImage(img, 0, 0, null);   g.setColor(color);   g.setFont(Dfont);   g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP,                                        alpha));   g.drawString(text, x, y);   g.dispose();   FileOutputStream out = new FileOutputStream(imgPath);   JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);   encoder.encode(image);   out.close();          } catch (Exception e) {                System.out.println(e);          }        }}

?测试代码

package com.test1433;import java.awt.Color;import java.awt.Font;public class TestPic {public static void main(String[] args) {Font font = new Font("宋体",50,60);Color color = new Color(0,0,0);ImageHelper.textMark("c://2012.jpg","http://www.baidu.com",font,color,20,40,1f);} }
?

热点排行