package imgUtil; import java.awt.Color; import java.awt.Font; import java.awt.FontMetrics; import java.awt.Graphics; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import java.util.Random; import javax.imageio.ImageIO; /** * 图像处理: 一、水印文字 二、水印图标 三、缩略图 四、裁剪图像 * * @author Weirdo-world */ public class ImgProcessing { private File file = new File(""); // 原文件或目录 private String text = "Weirdo-world"; // 水印文字 private Color color = new Color(255, 255, 255); // 水印字体颜色及透明度 private Font font = new Font("黑体", Font.BOLD, 30); // 水印字体 private String dirl = "e:/"; // 水印图片存放目录 private int position = 9;// 水印位置 private File icon = new File("");// 水印图标 public ImgProcessing() { } /** * @param file * 原图 * @param dirl * 存放目录 */ public ImgProcessing(File file, String dirl) { this.file = file; this.dirl = dirl; } /** * @return 获取原文件 */ public File getFile() { return file; } /** * @param file * 设置原图片或目录 */ public void setFile(File file) { this.file = file; } /** * @return 获取文字 */ public String getText() { return text; } /** * @param text * 水印文字设置 */ public void setText(String text) { this.text = text; } /** * @return 获取颜色 */ public Color getColor() { return color; } /** * @param color * 设置水印字体颜色及透明度 */ public void setColor(Color color) { this.color = color; } /** * @return 获取字体 */ public Font getFont() { return font; } /** * @param font * 水印字体设置 */ public void setFont(Font font) { this.font = font; } /** * @return 获取存放目录 */ public String getDirl() { return dirl; } /** * @param dirl * 设置水印图片存放目录 */ public void setDirl(String dirl) { this.dirl = dirl; } /** * @return 获取位置 */ public int getPosition() { return position; } /** * @param position * 设置水印位置 */ public void setPosition(int position) { this.position = position; } /** * @return 获取图标 */ public File getIcon() { return icon; } /** * @param icon * 水印图标 */ public void setIcon(File icon) { this.icon = icon; } /** * 添加水印文字 */ public void imgText() { try { if (!file.canRead()) { System.out.println("请定义一个原图文件"); return; } else if (!file.getName().toLowerCase().endsWith(".jpg")) { if (!file.getName().toLowerCase().endsWith(".png")) { System.out.println("请先定义要添加水印的图片文件,格式为:jpg、png"); return; } } BufferedImage bf = ImageIO.read(file); // 读取文件 Graphics g = bf.getGraphics();// 建立画笔 g.setFont(font); // 设置字体 g.setColor(color); // 设置颜色 FontMetrics f = g.getFontMetrics(); // 建立字体规格 int fw = f.stringWidth(text); // 获取字体宽度 int fh = f.getHeight(); // 获取字体高度 int x = 0, y = 0; Random r = new Random(); switch (position) { case 1: // 左上 x = 20; y = 20 + font.getSize(); break; case 2: // 中上 x = (int) ((bf.getWidth() - fw) / 2f); y = 20 + font.getSize(); break; case 3: // 右上 x = bf.getWidth() - fw - 20; y = 20 + font.getSize(); break; case 4: // 左中 x = 20; y = (int) ((bf.getHeight() - fh) / 2f) + font.getSize(); break; case 5: // 中心 x = (int) ((bf.getWidth() - fw) / 2f); y = (int) ((bf.getHeight() - fh) / 2f) + font.getSize(); break; case 6: // 右中 x = bf.getWidth() - fw - 20; y = (int) ((bf.getHeight() - fh) / 2f) + font.getSize(); break; case 7: // 左下 x = 20; y = bf.getHeight() - fh - 20 + font.getSize(); break; case 8: // 中下 x = (int) ((bf.getWidth() - fw) / 2f); y = bf.getHeight() - fh - 20 + font.getSize(); break; case 9: // 右下 x = bf.getWidth() - fw - 20; y = bf.getHeight() - fh - 20 + font.getSize(); break; default: // 随机 x = r.nextInt(bf.getWidth() - fw - 20) + 20; y = r.nextInt(bf.getHeight() - fh - 20) + font.getSize(); break; } g.drawString(text, x, y);// 写入文字 g.dispose();// 关闭画笔 String ext = file.getName().substring(file.getName().lastIndexOf(".") + 1); File dir = new File(dirl + file.getName().substring(0, file.getName().lastIndexOf(".")) + "_text." + ext); if (!dir.getParentFile().exists()) { System.out.println("指定存放目录不存在!!"); return; } ImageIO.write(bf, "jpg", dir);// 写入图片 } catch (IOException e) { e.printStackTrace(); } } /** * 添加水印图标 */ public void imgIcon() { try { if (!file.canRead() | !icon.canRead()) { System.out.println("1.请定义一个原图文件和水印图标文件"); return; } else if (!file.getName().toLowerCase().endsWith(".jpg")) { if (!file.getName().toLowerCase().endsWith(".png")) { System.out.println("2.原图文件格式不对,格式应为:jpg、png"); return; } } else if (!icon.getName().toLowerCase().endsWith(".jpg")) { if (!icon.getName().toLowerCase().endsWith(".png")) { System.out.println("3.水印图标文件格式不对,格式应为:jpg、png"); return; } } BufferedImage bf = ImageIO.read(file); // 读取原图像 int bfw = bf.getWidth(); int bfh = bf.getHeight(); BufferedImage ic = ImageIO.read(icon); // 读取水印图标 int icw = ic.getWidth(); int ich = ic.getHeight(); Graphics g = bf.getGraphics(); int x = 0, y = 0; Random r = new Random(); switch (position) { case 1: // 左上 x = 20; y = 20; break; case 2: // 中上 x = (int) ((bfw - icw) / 2d); y = 20; break; case 3: // 右上 x = bfw - icw - 20; y = 20; break; case 4: // 左中 x = 20; y = (int) ((bfh - ich) / 2d); break; case 5: // 中心 x = (int) ((bfw - icw) / 2d); y = (int) ((bfh - ich) / 2d); break; case 6: // 右中 x = bfw - icw - 20; y = (int) ((bfh - ich) / 2d); break; case 7: // 左下 x = 20; y = bfh - ich - 20; break; case 8: // 中下 x = (int) ((bfw - icw) / 2d); y = bfh - ich - 20; break; case 9: // 右下 x = bfw - icw - 20; y = bfh - ich - 20; break; default: // 随机 x = r.nextInt(bfw - icw - 20) + 20; y = r.nextInt(bfh - ich - 40) + 20; break; } g.drawImage(ic, x, y, icw, ich, null); g.dispose();// 关闭画笔 String ext = file.getName().substring(file.getName().lastIndexOf(".") + 1); File dir = new File(dirl + file.getName().substring(0, file.getName().lastIndexOf(".")) + "_icon." + ext); if (!dir.getParentFile().exists()) { System.out.println("指定存放目录不存在!!"); return; } ImageIO.write(bf, "jpg", dir);// 写入图片 } catch (IOException e) { e.printStackTrace(); } } /** * 根据百分比生成缩略图 * * @param thum * 指定缩略图的百分比 */ public void imgThumbnail(double thum) { try { if (!file.canRead()) { System.out.println("请定义一个原图文件"); return; } else if (!file.getName().toLowerCase().endsWith(".jpg")) { if (!file.getName().toLowerCase().endsWith(".png")) { System.out.println("请先定义原图片文件,格式为:jpg、png"); return; } } BufferedImage i = ImageIO.read(file); int iw = i.getWidth(); int ih = i.getHeight(); int w = (int) (iw * thum); int h = (int) (ih * thum); BufferedImage di = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB); Graphics g = di.getGraphics(); g.drawImage(i, 0, 0, w, h, null); g.dispose(); String ext = file.getName().substring(file.getName().lastIndexOf(".") + 1); File dir = new File(dirl + file.getName().substring(0, file.getName().lastIndexOf(".")) + "_p_thum." + ext); if (!dir.getParentFile().exists()) { System.out.println("指定存放目录不存在!!"); return; } ImageIO.write(di, "jpg", dir); } catch (IOException e) { e.printStackTrace(); } } /** * 根据宽生成缩略图 * * @param thum * 指定缩略图的宽 */ public void imgThumbnail(int thum) { try { if (!file.canRead()) { System.out.println("请定义一个原图文件"); return; } else if (!file.getName().toLowerCase().endsWith(".jpg")) { if (!file.getName().toLowerCase().endsWith(".png")) { System.out.println("请先定义原图片文件,格式为:jpg、png"); return; } } BufferedImage i = ImageIO.read(file); int iw = i.getWidth(); int ih = i.getHeight(); int w = thum; int h = (int) ((double) thum / iw * ih); BufferedImage di = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB); Graphics g = di.getGraphics(); g.drawImage(i, 0, 0, w, h, null); g.dispose(); String ext = file.getName().substring(file.getName().lastIndexOf(".") + 1); File dir = new File(dirl + file.getName().substring(0, file.getName().lastIndexOf(".")) + "_w_thum." + ext); if (!dir.getParentFile().exists()) { System.out.println("指定存放目录不存在!!"); return; } ImageIO.write(di, "jpg", dir); } catch (IOException e) { e.printStackTrace(); } } /** * 裁剪图像 * * @param w * 剪切的宽 * @param h * 剪切的高 * @param x * 指定从原图的宽开始 * @param y * 指定从原图的高开始 */ public void imgCrop(int w, int h, int x, int y) { try { if (!file.canRead()) { System.out.println("请定义一个原图文件"); return; } else if (!file.getName().toLowerCase().endsWith(".jpg")) { if (!file.getName().toLowerCase().endsWith(".png")) { System.out.println("请先定义原图片文件,格式为:jpg、png"); return; } } BufferedImage bi = ImageIO.read(file); BufferedImage ni = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB); Graphics g = ni.getGraphics(); int nw = w + x; int nh = h + y; g.drawImage(bi, 0, 0, w, h, x, y, nw, nh, null); g.dispose(); String ext = file.getName().substring(file.getName().lastIndexOf(".") + 1); File dir = new File(dirl + file.getName().substring(0, file.getName().lastIndexOf(".")) + "_crop." + ext); if (!dir.getParentFile().exists()) { System.out.println("指定存放目录不存在!!"); return; } ImageIO.write(ni, "jpg", dir); } catch (IOException e) { e.printStackTrace(); } } }