java压缩图片,加水印操作

java处理图片压缩,或者压缩并加水印

package com.hannan.ehu.test.java;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import javax.imageio.IIOImage;
import javax.imageio.ImageIO;
import javax.imageio.ImageWriteParam;
import javax.imageio.ImageWriter;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.*;

public class PictureUtils {

    private static Logger log = LoggerFactory.getLogger(PictureUtils.class);
    /**
     * 图片压缩
     * @param picSteam 图片流
     * @param width 宽度
     * @return
     */
    public static InputStream compress(InputStream picSteam,int width){
        try {
            BufferedImage bufImg = ImageIO.read(picSteam);
            int realWidth=bufImg.getWidth();
            int realHeight=bufImg.getHeight();
            int height = realHeight*width/realWidth;
            if(width<realWidth){
                height = realHeight;
                width = realWidth;
            }

            BufferedImage buf = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
            Image scaleImage = bufImg.getScaledInstance(width, height, Image.SCALE_SMOOTH);
//            buf.getGraphics().drawImage(scaleImage,0,0,null); // 单纯压缩图片
            // 加水印处理
            Graphics2D graphics=buf.createGraphics();
            graphics.drawImage(scaleImage,0,0,null);
            graphics.setColor(Color.white);
            int fontSize=20;
            graphics.setFont(new Font("黑体",36,fontSize));
            graphics.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, 0.5f));
            graphics.drawString("我是水印", width - (4 * fontSize), height - fontSize );
            graphics.dispose();

            ImageWriter imgWriter = ImageIO.getImageWritersByFormatName("jpg").next();
            ImageWriteParam imgWriteParams = new javax.imageio.plugins.jpeg.JPEGImageWriteParam(null);
            ByteArrayOutputStream bos = new ByteArrayOutputStream();
            imgWriter.reset();
            imgWriter.setOutput(ImageIO.createImageOutputStream(bos));
            imgWriter.write(null, new IIOImage(buf, null, null), imgWriteParams);
            InputStream inputStream = new ByteArrayInputStream(bos.toByteArray());
            inputStream.close();
            return new ByteArrayInputStream(bos.toByteArray());
        } catch (IOException e) {
            log.error("图片压缩io异常:PictureUtils.compress<==>" + e.getMessage());
            return null;
        }
    }

    public static void main(String[] args) {
        File file =new File("E:\\chromeDownload\\精美图片\\73a1854c88278518121b0e5d89b591d8.jpg");
        try {
            InputStream inputStream=compress(new FileInputStream(file),800);
            if(inputStream!=null){
                byte[] buffer = new byte[inputStream.available()];
                int length=inputStream.read(buffer);
                OutputStream outStream = new FileOutputStream("E:\\chromeDownload\\精美图片\\test02.jpg");
                log.info("大小为:"+length);
                outStream.write(buffer);
                inputStream.close();
                outStream.flush();
                outStream.close();
            }

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值