图片增加水印,图片缩放,图片切割服务

来源:互联网 发布:自学跳舞的软件 编辑:程序博客网 时间:2024/06/05 03:35

#图片增加水印图

#图片水印文字

#图片原图缩放


import java.awt.Color;import java.awt.Font;import java.awt.Graphics;import java.awt.Image;import java.awt.image.BufferedImage;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import javax.imageio.ImageIO;import com.sun.image.codec.jpeg.JPEGCodec;import com.sun.image.codec.jpeg.JPEGImageEncoder;// 图片操作,改变大小加水印public class ImageOperate {public static void main(String[] args) throws IOException {ImageOperate.waterMark("/Users/kevin/Downloads/test1.jpg", "/Users/kevin/Downloads/test.png");ImageOperate.waterMarkTxt("/Users/kevin/Downloads/test1.jpg", "http://blog.csdn.net/kevin_luan");ImageOperate.zoomImage("/Users/kevin/Downloads/test1.jpg", 300, 200);}/** * 给图片加水印,但不改变大小 *  * @param strOriginalFileName *            原始文件 * @param strWaterMarkFileName *            水印 */public static void waterMark(String originalPath, String waterMarkPath) {try {File fileOriginal = new File(originalPath);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(waterMarkPath);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();FileOutputStream fos = new FileOutputStream(originalPath);JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(fos);encoder.encode(bufImage);fos.flush();fos.close();fos = null;} catch (Exception e) {e.printStackTrace();}}/** * 给图片加水印文字 *  * @param strOriginalFileName *            原始文件 * @param strWaterMarkFileName *            水印 */public static void waterMarkTxt(String originalPath, String data) {try {File fileOriginal = new File(originalPath);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.setFont(new Font("宋体", Font.BOLD, 20));g.drawString(data, (int) (widthOriginal / 2), heightOriginal - 20);g.dispose();FileOutputStream fos = new FileOutputStream(originalPath);JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(fos);encoder.encode(bufImage);fos.flush();fos.close();fos = null;} catch (Exception e) {e.printStackTrace();}}/** * 缩放图片 *  * @throws IOException */public static String zoomImage(String srcImgFile, int width, int height) throws IOException {java.io.File file = new java.io.File(srcImgFile);int splitIndex = srcImgFile.indexOf(".");String path = srcImgFile.substring(0, splitIndex) + width + "_" + height + srcImgFile.substring(splitIndex);Image src = javax.imageio.ImageIO.read(file);java.awt.image.BufferedImage bufferedImage = new java.awt.image.BufferedImage(width, height,java.awt.image.BufferedImage.TYPE_INT_RGB);bufferedImage.getGraphics().drawImage(src, 0, 0, width, height, null);FileOutputStream newimage = new FileOutputStream(path);JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(newimage);encoder.encode(bufferedImage); // 近JPEG编码newimage.close();return path;}}

#基于Spring MVN搭建一个简单版的图片切割服务

import java.awt.Graphics;import java.awt.Image;import java.awt.image.BufferedImage;import java.io.IOException;import java.net.URL;import javax.imageio.ImageIO;import javax.servlet.http.HttpServletResponse;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.PathVariable;import org.springframework.web.bind.annotation.RequestMapping;/** * 切割图片服务 *  * @author KEVIN LUAN * */@Controllerpublic class ImageScaleController {/** * 切割图片 访问URL: * http://localhost:8080/h5/scale_110x111?imgUrl=http://www.mdtit * .com/frontend/images/slider1.jpg *  * @param response * @param width *            宽 * @param height *            高 * @param imgUrl *            切割图URL * @throws IOException */@RequestMapping(value = "/scale_{width}x{height}")public void scale(HttpServletResponse response, @PathVariable int width, @PathVariable int height, String imgUrl)throws IOException {BufferedImage image = ImageIO.read(new URL(imgUrl));image = scale(image, width, height);response.setDateHeader("Expires", System.currentTimeMillis() + 2592000000L);response.setContentType("image/png");ImageIO.write(image, "png", response.getOutputStream());response.getOutputStream().flush();response.getOutputStream().close();}/** * 裁剪图片 *  * @param image * @param x * @param y * @return */private BufferedImage scale(BufferedImage image, int x, int y) {int height = y;int width = x;if (height == 0) {height = (int) (width / getXYRatioOf(image));} else if (height < 0) {height = -height * width;width = (int) (height / getXYRatioOf(image));}if (needResize(image, width, height)) {if (needCut(image, width, height)) {image = cutImage(image, width, height);}if (needResize(image, width, height)) {image = resizeImage(image, width, height);}}return image;}BufferedImage resizeImage(BufferedImage image, int width, int height) {int y = (int) ((1.0f * image.getHeight() * width) / image.getWidth());Image result = image.getScaledInstance(width, y, BufferedImage.SCALE_DEFAULT);if (result instanceof BufferedImage) {return (BufferedImage) result;} else {BufferedImage bi = new BufferedImage(width, y, BufferedImage.TYPE_INT_RGB);Graphics graphics = bi.getGraphics();graphics.drawImage(result, 0, 0, null);graphics.dispose();return bi;}}boolean needResize(BufferedImage image, int maxX, int maxY) {return image.getWidth() > maxX || image.getHeight() > maxY * 3;}BufferedImage cutImage(BufferedImage image, int wantX, int wantY) {int width = image.getWidth();int height = image.getHeight();int startX = 0;int startY = 0;float wantRatio = getRatio(wantX, wantY);float imageRatio = getXYRatioOf(image);if (isTooHigh(imageRatio, wantRatio)) {height = (int) (width / wantRatio);startY = (image.getHeight() - height) / 2;} else {width = (int) (height * wantRatio);if (width < wantX) {width = wantX;}startX = (image.getWidth() - width) / 2;}return image.getSubimage(startX, startY, width, height);}boolean isTooHigh(float realRatio, float wantRatio) {return wantRatio > realRatio;}boolean needCut(BufferedImage image, int wantX, int wantY) {float ratio = getXYRatioOf(image);float wantRatio = getRatio(wantX, wantY);return wantRatio > ratio + 0.01f || wantRatio < ratio - 0.01f;}private float getXYRatioOf(BufferedImage image) {return getRatio(image.getWidth(), image.getHeight());}private float getRatio(int x, int y) {return ((float) x) / y;}}





1 0