给图片添加水印,生成缩略图,图片透明等

本文深入探讨了图片处理和编辑的关键技术,包括图片格式转换、尺寸调整、添加文字、添加水印等实用技巧,旨在帮助开发者提升图片处理能力。
package com.dengyang.utils;

/**
 * @author : dengyang
 * Date: 12-9-20
 * Time: 下午4:48.
 */
import java.io.IOException;
import java.awt.Graphics;
import java.awt.*;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.awt.image.ImageProducer;
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;
import com.sun.jimi.core.Jimi;
import com.sun.jimi.core.JimiException;
import com.sun.jimi.core.JimiWriter;
import com.sun.jimi.core.options.JPGOptions;
public class PicUtil {

//将任何格式的图片转换成JPG图片

        public static void toReduce(String source, String dest){
            try {
                JPGOptions options = new JPGOptions();
                options.setQuality(100);
                ImageProducer image = Jimi.getImageProducer(source);// 图片格式在jimi的解码格式范围内
                JimiWriter writer = Jimi.createJimiWriter(dest);// 图片编码
                writer.setSource(image);
                writer.setOptions(options);// 对输出文件的属性进行相关的设置,每种格式的属性都不一样
                writer.putImage(dest);
            } catch (JimiException je) {
                System.err.println("Error: " + je);
            }
        }


//实现对图片的抽取缩略并控制生成图的大小

        public static void changDimension(String oldfile, String newfile) throws JimiException, IOException{
            String temp = newfile;
            File inputfile = null;
            ImageOperation.toReduce(oldfile, temp);
            inputfile = new File(temp); // 读入文件
            Image src = ImageIO.read(inputfile); // 构造Image对象
            int wideth =src.getWidth(null); // 得到源图宽
            int height = src.getHeight(null); // 得到源图长
            int iWideth = wideth/3;
            int iHeight = height/3;
            BufferedImage tag = null;
            try {
                tag = new BufferedImage(iWideth, iHeight,BufferedImage.TYPE_INT_RGB);
                tag.getGraphics().drawImage(src, 0, 0, iWideth, iHeight, null); // 绘制缩小后的图
                JimiWriter writer = Jimi.createJimiWriter(newfile);
                writer.setSource(tag);
                writer.putImage(newfile);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

//给图片添加文字

        public static void Imagefont(String oldfile, String newfile, String text){
            Image img;
            String filename = oldfile.substring(oldfile.lastIndexOf(".") + 1);
            String temp = newfile;

            try {
                if (!filename.equals("jpg")) {
                    ImageOperation.toReduce(oldfile, newfile);
                    img = ImageIO.read(new File(temp));
                } else {
                    img = ImageIO.read(new File(oldfile));
                }
                int width = img.getWidth(null);
                int height = img.getHeight(null);
                BufferedImage image = new BufferedImage(width, height,BufferedImage.TYPE_INT_RGB);
                Graphics g = image.createGraphics();

                g.drawImage(img, 0, 0, width, height, null);
                g.setColor(Color.red);
                g.setFont(new Font("Courier", Font.HANGING_BASELINE, 20));
                g.drawString(text, width - 360, height - 20);
                g.dispose();

                FileOutputStream os = new FileOutputStream(temp);
                JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(os);
                encoder.encode(image);
                os.close();
            } catch (Exception e) {
                e.getMessage();
            }
        }


//给图片添加水印,并控制水印图片的位置及透明度

        public static void Imagese(String oldfile, String newfile, String syoldfile,int t, float to){

            String filename = oldfile.substring(oldfile.lastIndexOf(".") + 1);
            Image img;
            String temp = newfile;
            float alpha = to;

            try {
                if (!filename.equals("jpg")) {
                    ImageOperation.toReduce(oldfile, newfile);
                    img = ImageIO.read(new File(temp));
                } else {
                    img = ImageIO.read(new File(oldfile));
                }

                int width = img.getWidth(null);
                int height = img.getHeight(null);
                int ws = width / 3;
                int hs = height / 3;

                BufferedImage image = new BufferedImage(width, height,BufferedImage.TYPE_INT_RGB);
                Graphics2D g = image.createGraphics();
                g.drawImage(img, 0, 0, width, height, null);
                Image logo = ImageIO.read(new File(syoldfile));
                int lw = logo.getWidth(null);
                int lh = logo.getHeight(null);
                g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP,alpha));

                //水印文件在源文件的右下角
                g.drawImage(logo, width-lw, height-lh, lw, lh, null);
                g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER));
                g.dispose();
                FileOutputStream oss = new FileOutputStream(temp);
                JPEGImageEncoder encoders = JPEGCodec.createJPEGEncoder(oss);
                encoders.encode(image);
                oss.close();
            } catch (Exception e) {
                e.getMessage();
            }

        }
}

转载于:https://my.oschina.net/dyyweb/blog/79545

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值