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();
}
}
}