package org.review;
import java.awt.AlphaComposite;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.color.ColorSpace;
import java.awt.image.BufferedImage;
import java.awt.image.ColorConvertOp;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import javax.imageio.ImageIO;
import javax.imageio.ImageReadParam;
import javax.imageio.ImageReader;
import javax.imageio.stream.ImageInputStream;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
public class OperateImage {
public OperateImage() {
super();
}
public void cropImage(String srcPath, String
toPath, int x, int y,
int width,
int height, String readImageFormat,
String
writeImageFormat) throws IOException {
FileInputStream fis =
null;
ImageInputStream iis =
null;
try {
//读取图片文件
fis = new
FileInputStream(srcPath);
Iterator it =
ImageIO.getImageReadersByFormatName(readImageFormat);
ImageReader
reader = (ImageReader) it.next();
//获取图片流
iis =
ImageIO.createImageInputStream(fis);
reader.setInput(iis,
true);
ImageReadParam
param = reader.getDefaultReadParam();
//定义一个矩形
Rectangle
rect = new Rectangle(x, y, width, height);
//提供一个
BufferedImage,将其用作解码像素数据的目标。
param.setSourceRegion(rect);
BufferedImage
bi = reader.read(0, param);
//保存新图片
ImageIO.write(bi,
writeImageFormat, new File(toPath));
} finally {
if (fis !=
null)
fis.close();
if (iis !=
null)
iis.close();
}
}
public void reduceImageByRatio(String
srcImagePath, String toImagePath,
int
widthRatio, int heightRatio) throws IOException {
FileOutputStream out =
null;
try {
//读入文件
File file =
new File(srcImagePath);
//
构造Image对象
BufferedImage
src = javax.imageio.ImageIO.read(file);
int width =
src.getWidth();
int height =
src.getHeight();
// 缩小边长
BufferedImage
tag = new BufferedImage(width / widthRatio, height
/
heightRatio, BufferedImage.TYPE_INT_RGB);
// 绘制
缩小 后的图片
tag.getGraphics().drawImage(src,
0, 0, width / widthRatio,
height
/ heightRatio, null);
out = new
FileOutputStream(toImagePath);
JPEGImageEncoder
encoder = JPEGCodec.createJPEGEncoder(out);
encoder.encode(tag);
} catch (Exception e) {
e.printStackTrace();
} finally {
if (out !=
null) {
out.close();
}
}
}
public void reduceImageEqualProportion(String
srcImagePath,
String
toImagePath, int ratio) throws IOException {
FileOutputStream out =
null;
try {
//读入文件
File file =
new File(srcImagePath);
//
构造Image对象
BufferedImage
src = javax.imageio.ImageIO.read(file);
int width =
src.getWidth();
int height =
src.getHeight();
// 缩小边长
BufferedImage
tag = new BufferedImage(width / ratio,
height
/ ratio, BufferedImage.TYPE_INT_RGB);
// 绘制
缩小 后的图片
tag.getGraphics().drawImage(src,
0, 0, width / ratio,
height
/ ratio, null);
out = new
FileOutputStream(toImagePath);
JPEGImageEncoder
encoder = JPEGCodec.createJPEGEncoder(out);
encoder.encode(tag);
} catch (Exception e) {
e.printStackTrace();
} finally {
if (out !=
null) {
out.close();
}
}
}
public void enlargementImageByRatio(String
srcImagePath,
String
toImagePath, int widthRatio, int heightRatio)
throws
IOException {
FileOutputStream out =
null;
try {
//读入文件
File file =
new File(srcImagePath);
//
构造Image对象
BufferedImage
src = javax.imageio.ImageIO.read(file);
int width =
src.getWidth();
int height =
src.getHeight();
// 放大边长
BufferedImage
tag = new BufferedImage(width * widthRatio, height
*
heightRatio, BufferedImage.TYPE_INT_RGB);
//绘制放大后的图片
tag.getGraphics().drawImage(src,
0, 0, width * widthRatio,
height
* heightRatio, null);
out = new
FileOutputStream(toImagePath);
JPEGImageEncoder
encoder = JPEGCodec.createJPEGEncoder(out);
encoder.encode(tag);
} catch (Exception e) {
e.printStackTrace();
} finally {
if (out !=
null) {
out.close();
}
}
}
public void
enlargementImageEqualProportion(String srcImagePath,
String
toImagePath, int ratio) throws IOException {
FileOutputStream out =
null;
try {
//读入文件
File file =
new File(srcImagePath);
//
构造Image对象
BufferedImage
src = javax.imageio.ImageIO.read(file);
int width =
src.getWidth();
int height =
src.getHeight();
// 放大边长
BufferedImage
tag = new BufferedImage(width * ratio,
height
* ratio, BufferedImage.TYPE_INT_RGB);
//绘制放大后的图片
tag.getGraphics().drawImage(src,
0, 0, width * ratio,
height
* ratio, null);
out = new
FileOutputStream(toImagePath);
JPEGImageEncoder
encoder = JPEGCodec.createJPEGEncoder(out);
encoder.encode(tag);
} catch (Exception e) {
e.printStackTrace();
} finally {
if (out !=
null) {
out.close();
}
}
}
public void resizeImage(String srcImagePath,
String toImagePath, int width,
int height)
throws IOException {
FileOutputStream out =
null;
try {
//读入文件
File file =
new File(srcImagePath);
//
构造Image对象
BufferedImage
src = javax.imageio.ImageIO.read(file);
// 放大边长
BufferedImage
tag = new BufferedImage(width, height,
BufferedImage.TYPE_INT_RGB);
//绘制放大后的图片
tag.getGraphics().drawImage(src,
0, 0, width, height, null);
out = new
FileOutputStream(toImagePath);
JPEGImageEncoder
encoder = JPEGCodec.createJPEGEncoder(out);
encoder.encode(tag);
} catch (Exception e) {
e.printStackTrace();
} finally {
if (out !=
null) {
out.close();
}
}
}
public void joinImagesHorizontal(String
firstSrcImagePath,
String
secondSrcImagePath, String imageFormat, String toPath) {
try {
//读取第一张图片
File fileOne
= new File(firstSrcImagePath);
BufferedImage
imageOne = ImageIO.read(fileOne);
int width =
imageOne.getWidth();//图片宽度
int height =
imageOne.getHeight();//图片高度
//从图片中读取RGB
int[]
imageArrayOne = new int[width * height];
imageArrayOne
= imageOne.getRGB(0, 0, width, height, imageArrayOne,
0,
width);
//对第二张图片做相同的处理
File fileTwo
= new File(secondSrcImagePath);
BufferedImage
imageTwo = ImageIO.read(fileTwo);
int width2 =
imageTwo.getWidth();
int height2 =
imageTwo.getHeight();
int[]
ImageArrayTwo = new int[width2 * height2];
ImageArrayTwo
= imageTwo.getRGB(0, 0, width, height, ImageArrayTwo,
0,
width);
//ImageArrayTwo
=
imageTwo.getRGB(0,0,width2,height2,ImageArrayTwo,0,width2);
//生成新图片
//int height3
= (height>height2 || height==height2)?height:height2;
BufferedImage
imageNew = new BufferedImage(width * 2, height,
BufferedImage.TYPE_INT_RGB);
//BufferedImage
imageNew =
new
BufferedImage(width+width2,height3,BufferedImage.TYPE_INT_RGB);
imageNew.setRGB(0,
0, width, height, imageArrayOne, 0,
width);//设置左半部分的RGB
imageNew.setRGB(width,
0, width, height, ImageArrayTwo, 0, width);//设置右半部分的RGB
//imageNew.setRGB(width,0,width2,height2,ImageArrayTwo,0,width2);//设置右半部分的RGB
File
outFile = new File(toPath);
ImageIO.write(imageNew,
imageFormat, outFile);//写图片
} catch (Exception e) {
e.printStackTrace();
}
}
public boolean joinImageListHorizontal(String[]
pics, String type,
String
dst_pic) {
try {
int len =
pics.length;
if (len <
1) {
System.out.println("pics
len < 1");
return
false;
}
File[] src =
new File[len];
BufferedImage[]
images = new BufferedImage[len];
int[][]
imageArrays = new int[len][];
for (int i =
0; i < len; i++) {
src[i]
= new File(pics[i]);
images[i]
= ImageIO.read(src[i]);
int
width = images[i].getWidth();
int
height = images[i].getHeight();
imageArrays[i]
= new int[width * height];//
从图片中读取RGB
imageArrays[i]
= images[i].getRGB(0, 0, width, height,
imageArrays[i],
0, width);
}
int
dst_width = 0;
int
dst_height = images[0].getHeight();
for (int i =
0; i < images.length; i++) {
dst_height
= dst_height > images[i].getHeight() ? dst_height
:
images[i].getHeight();
dst_width
+= images[i].getWidth();
}
//System.out.println(dst_width);
//System.out.println(dst_height);
if
(dst_height < 1) {
System.out.println("dst_height
< 1");
return
false;
}
BufferedImage
ImageNew = new BufferedImage(dst_width, dst_height,
BufferedImage.TYPE_INT_RGB);
int width_i =
0;
for (int i =
0; i < images.length; i++) {
ImageNew.setRGB(width_i,
0, images[i].getWidth(), dst_height,
imageArrays[i],
0, images[i].getWidth());
width_i
+= images[i].getWidth();
}
File outFile
= new File(dst_pic);
ImageIO.write(ImageNew,
type, outFile);// 写图片
} catch (Exception e) {
e.printStackTrace();
return
false;
}
return true;
}
public void joinImagesVertical(String
firstSrcImagePath,
String
secondSrcImagePath, String imageFormat, String toPath) {
try {
//读取第一张图片
File fileOne
= new File(firstSrcImagePath);
BufferedImage
imageOne = ImageIO.read(fileOne);
int width =
imageOne.getWidth();//图片宽度
int height =
imageOne.getHeight();//图片高度
//从图片中读取RGB
int[]
imageArrayOne = new int[width * height];
imageArrayOne
= imageOne.getRGB(0, 0, width, height, imageArrayOne,
0,
width);
//对第二张图片做相同的处理
File fileTwo
= new File(secondSrcImagePath);
BufferedImage
imageTwo = ImageIO.read(fileTwo);
int width2 =
imageTwo.getWidth();
int height2 =
imageTwo.getHeight();
int[]
ImageArrayTwo = new int[width2 * height2];
ImageArrayTwo
= imageTwo.getRGB(0, 0, width, height, ImageArrayTwo,
0,
width);
//ImageArrayTwo
=
imageTwo.getRGB(0,0,width2,height2,ImageArrayTwo,0,width2);
//生成新图片
//int width3
= (width>width2 || width==width2)?width:width2;
BufferedImage
imageNew = new BufferedImage(width, height * 2,
BufferedImage.TYPE_INT_RGB);
//BufferedImage
imageNew =
new
BufferedImage(width3,height+height2,BufferedImage.TYPE_INT_RGB);
imageNew.setRGB(0,
0, width, height, imageArrayOne, 0,
width);//设置上半部分的RGB
imageNew.setRGB(0,
height, width, height, ImageArrayTwo, 0, width);//设置下半部分的RGB
//imageNew.setRGB(0,height,width2,height2,ImageArrayTwo,0,width2);//设置下半部分的RGB
File
outFile = new File(toPath);
ImageIO.write(imageNew,
imageFormat, outFile);//写图片
} catch (Exception e) {
e.printStackTrace();
}
}
public boolean joinImageListVertical(String[]
pics, String type,
String
dst_pic) {
try {
int len =
pics.length;
if (len <
1) {
System.out.println("pics
len < 1");
return
false;
}
File[] src =
new File[len];
BufferedImage[]
images = new BufferedImage[len];
int[][]
imageArrays = new int[len][];
for (int i =
0; i < len; i++) {
//System.out.println(i);
src[i]
= new File(pics[i]);
images[i]
= ImageIO.read(src[i]);
int
width = images[i].getWidth();
int
height = images[i].getHeight();
imageArrays[i]
= new int[width * height];//
从图片中读取RGB
imageArrays[i]
= images[i].getRGB(0, 0, width, height,
imageArrays[i],
0, width);
}
int
dst_height = 0;
int dst_width
= images[0].getWidth();
for (int i =
0; i < images.length; i++) {
dst_width
= dst_width > images[i].getWidth() ? dst_width
:
images[i].getWidth();
dst_height
+= images[i].getHeight();
}
//System.out.println(dst_width);
//System.out.println(dst_height);
if
(dst_height < 1) {
System.out.println("dst_height
< 1");
return
false;
}
BufferedImage
ImageNew = new BufferedImage(dst_width, dst_height,
BufferedImage.TYPE_INT_RGB);
int height_i
= 0;
for (int i =
0; i < images.length; i++) {
ImageNew.setRGB(0,
height_i, dst_width, images[i].getHeight(),
imageArrays[i],
0, dst_width);
height_i
+= images[i].getHeight();
}
File outFile
= new File(dst_pic);
ImageIO.write(ImageNew,
type, outFile);// 写图片
} catch (Exception e) {
e.printStackTrace();
return
false;
}
return true;
}
public void mergeBothImage(String
negativeImagePath,
String
additionImagePath, int x, int y, String toPath)
throws
IOException {
InputStream is = null;
InputStream is2 = null;
OutputStream os = null;
try {
is = new
FileInputStream(negativeImagePath);
is2 = new
FileInputStream(additionImagePath);
BufferedImage
image = ImageIO.read(is);
BufferedImage
image2 = ImageIO.read(is2);
System.out.println(image2);
Graphics g =
image.getGraphics();
g.drawImage(image2,
0, 0, null);
os = new
FileOutputStream(toPath);
JPEGImageEncoder
enc = JPEGCodec.createJPEGEncoder(os);
enc.encode(image);
} catch (Exception e) {
e.printStackTrace();
} finally {
if (os !=
null) {
os.close();
}
if (is2 !=
null) {
is2.close();
}
if (is !=
null) {
is.close();
}
}
}
public void mergeImageList(String
negativeImagePath,
List
additionImageList, String imageFormat, String toPath)
throws
IOException {
InputStream is = null;
InputStream is2 = null;
OutputStream os = null;
try {
is = new
FileInputStream(negativeImagePath);
BufferedImage
image = ImageIO.read(is);
//Graphics
g=image.getGraphics();
Graphics2D g
= image.createGraphics();
;
BufferedImage
image2 = null;
if
(additionImageList != null) {
for
(int i = 0; i < additionImageList.size(); i++) {
//解析附加图片信息:x坐标、
y坐标、 additionImagePath附加图片路径
//图片信息存储在一个数组中
String[]
additionImageInfo = (String[]) additionImageList
.get(i);
int
x = Integer.parseInt(additionImageInfo[0]);
int
y = Integer.parseInt(additionImageInfo[1]);
String
additionImagePath = additionImageInfo[2];
//读取文件输入流,并合并图片
is2
= new FileInputStream(additionImagePath);
//System.out.println(x+"
: "+y+" :
"+additionImagePath);
image2
= ImageIO.read(is2);
g.drawImage(image2,
x, y, null);
}
}
os = new
FileOutputStream(toPath);
ImageIO.write(image,
imageFormat, os);//写图片
//JPEGImageEncoder
enc=JPEGCodec.createJPEGEncoder(os);
//enc.encode(image);
} catch (Exception e) {
e.printStackTrace();
} finally {
if (os !=
null) {
os.close();
}
if (is2 !=
null) {
is2.close();
}
if (is !=
null) {
is.close();
}
}
}
public void mergeBothImageTopleftcorner(String
negativeImagePath,
String
additionImagePath, String toPath) throws IOException {
InputStream is = null;
InputStream is2 = null;
OutputStream os = null;
try {
is = new
FileInputStream(negativeImagePath);
is2 = new
FileInputStream(additionImagePath);
BufferedImage
image = ImageIO.read(is);
BufferedImage
image2 = ImageIO.read(is2);
Graphics g =
image.getGraphics();
g.drawImage(image2,
0, 0, null);
os = new
FileOutputStream(toPath);
JPEGImageEncoder
enc = JPEGCodec.createJPEGEncoder(os);
enc.encode(image);
} catch (Exception e) {
e.printStackTrace();
} finally {
if (os !=
null) {
os.close();
}
if (is2 !=
null) {
is2.close();
}
if (is !=
null) {
is.close();
}
}
}
public void mergeBothImageToprightcorner(String
negativeImagePath,
String
additionImagePath, String toPath) throws IOException {
InputStream is = null;
InputStream is2 = null;
OutputStream os = null;
try {
is = new
FileInputStream(negativeImagePath);
is2 = new
FileInputStream(additionImagePath);
BufferedImage
image = ImageIO.read(is);
BufferedImage
image2 = ImageIO.read(is2);
Graphics g =
image.getGraphics();
g.drawImage(image2,
image.getWidth() - image2.getWidth(), 0, null);
os = new
FileOutputStream(toPath);
JPEGImageEncoder
enc = JPEGCodec.createJPEGEncoder(os);
enc.encode(image);
} catch (Exception e) {
e.printStackTrace();
} finally {
if (os !=
null) {
os.close();
}
if (is2 !=
null) {
is2.close();
}
if (is !=
null) {
is.close();
}
}
}
public void mergeBothImageLeftbottom(String
negativeImagePath,
String
additionImagePath, String toPath) throws IOException {
InputStream is = null;
InputStream is2 = null;
OutputStream os = null;
try {
is = new
FileInputStream(negativeImagePath);
is2 = new
FileInputStream(additionImagePath);
BufferedImage
image = ImageIO.read(is);
BufferedImage
image2 = ImageIO.read(is2);
Graphics g =
image.getGraphics();
g
.drawImage(image2,
0, image.getHeight()
-
image2.getHeight(), null);
os = new
FileOutputStream(toPath);
JPEGImageEncoder
enc = JPEGCodec.createJPEGEncoder(os);
enc.encode(image);
} catch (Exception e) {
e.printStackTrace();
} finally {
if (os !=
null) {
os.close();
}
if (is2 !=
null) {
is2.close();
}
if (is !=
null) {
is.close();
}
}
}
public void mergeBothImageRightbottom(String
negativeImagePath,
String
additionImagePath, String toPath) throws IOException {
InputStream is = null;
InputStream is2 = null;
OutputStream os = null;
try {
is = new
FileInputStream(negativeImagePath);
is2 = new
FileInputStream(additionImagePath);
BufferedImage
image = ImageIO.read(is);
BufferedImage
image2 = ImageIO.read(is2);
Graphics g =
image.getGraphics();
g.drawImage(image2,
image.getWidth() - image2.getWidth(), image
.getHeight()
-
image2.getHeight(), null);
os = new
FileOutputStream(toPath);
JPEGImageEncoder
enc = JPEGCodec.createJPEGEncoder(os);
enc.encode(image);
} catch (Exception e) {
e.printStackTrace();
} finally {
if (os !=
null) {
os.close();
}
if (is2 !=
null) {
is2.close();
}
if (is !=
null) {
is.close();
}
}
}
public void mergeBothImageCenter(String
negativeImagePath,
String
additionImagePath, String toPath) throws IOException {
InputStream is = null;
InputStream is2 = null;
OutputStream os = null;
try {
is = new
FileInputStream(negativeImagePath);
is2 = new
FileInputStream(additionImagePath);
BufferedImage
image = ImageIO.read(is);
BufferedImage
image2 = ImageIO.read(is2);
Graphics g =
image.getGraphics();
g.drawImage(image2,
image.getWidth() / 2 - image2.getWidth() / 2,
image.getHeight()
/ 2 - image2.getHeight() / 2, null);
os = new
FileOutputStream(toPath);
JPEGImageEncoder
enc = JPEGCodec.createJPEGEncoder(os);
enc.encode(image);
} catch (Exception e) {
e.printStackTrace();
} finally {
if (os !=
null) {
os.close();
}
if (is2 !=
null) {
is2.close();
}
if (is !=
null) {
is.close();
}
}
}
public void mergeBothImageTopcenter(String
negativeImagePath,
String
additionImagePath, String toPath) throws IOException {
InputStream is = null;
InputStream is2 = null;
OutputStream os = null;
try {
is = new
FileInputStream(negativeImagePath);
is2 = new
FileInputStream(additionImagePath);
BufferedImage
image = ImageIO.read(is);
BufferedImage
image2 = ImageIO.read(is2);
Graphics g =
image.getGraphics();
g.drawImage(image2,
image.getWidth() / 2 - image2.getWidth() / 2,
0,
null);
os = new
FileOutputStream(toPath);
JPEGImageEncoder
enc = JPEGCodec.createJPEGEncoder(os);
enc.encode(image);
} catch (Exception e) {
e.printStackTrace();
} finally {
if (os !=
null) {
os.close();
}
if (is2 !=
null) {
is2.close();
}
if (is !=
null) {
is.close();
}
}
}
public void mergeBothImageBottomcenter(String
negativeImagePath,
String
additionImagePath, String toPath) throws IOException {
InputStream is = null;
InputStream is2 = null;
OutputStream os = null;
try {
is = new
FileInputStream(negativeImagePath);
is2 = new
FileInputStream(additionImagePath);
BufferedImage
image = ImageIO.read(is);
BufferedImage
image2 = ImageIO.read(is2);
Graphics g =
image.getGraphics();
g.drawImage(image2,
image.getWidth() / 2 - image2.getWidth() / 2,
image.getHeight()
- image2.getHeight(), null);
os = new
FileOutputStream(toPath);
JPEGImageEncoder
enc = JPEGCodec.createJPEGEncoder(os);
enc.encode(image);
} catch (Exception e) {
e.printStackTrace();
} finally {
if (os !=
null) {
os.close();
}
if (is2 !=
null) {
is2.close();
}
if (is !=
null) {
is.close();
}
}
}
public void mergeBothImageLeftcenter(String
negativeImagePath,
String
additionImagePath, String toPath) throws IOException {
InputStream is = null;
InputStream is2 = null;
OutputStream os = null;
try {
is = new
FileInputStream(negativeImagePath);
is2 = new
FileInputStream(additionImagePath);
BufferedImage
image = ImageIO.read(is);
BufferedImage
image2 = ImageIO.read(is2);
Graphics g =
image.getGraphics();
g.drawImage(image2,
0, image.getHeight() / 2 - image2.getHeight()
/
2, null);
os = new
FileOutputStream(toPath);
JPEGImageEncoder
enc = JPEGCodec.createJPEGEncoder(os);
enc.encode(image);
} catch (Exception e) {
e.printStackTrace();
} finally {
if (os !=
null) {
os.close();
}
if (is2 !=
null) {
is2.close();
}
if (is !=
null) {
is.close();
}
}
}
public void mergeBothImageRightcenter(String
negativeImagePath,
String
additionImagePath, String toPath) throws IOException {
InputStream is = null;
InputStream is2 = null;
OutputStream os = null;
try {
is = new
FileInputStream(negativeImagePath);
is2 = new
FileInputStream(additionImagePath);
BufferedImage
image = ImageIO.read(is);
BufferedImage
image2 = ImageIO.read(is2);
Graphics g =
image.getGraphics();
g.drawImage(image2,
image.getWidth() - image2.getWidth(), image
.getHeight()
/
2 - image2.getHeight() / 2, null);
os = new
FileOutputStream(toPath);
JPEGImageEncoder
enc = JPEGCodec.createJPEGEncoder(os);
enc.encode(image);
} catch (Exception e) {
e.printStackTrace();
} finally {
if (os !=
null) {
os.close();
}
if (is2 !=
null) {
is2.close();
}
if (is !=
null) {
is.close();
}
}
}
public void grayImage(String srcImage, String
toPath, String imageFormat) {
try {
BufferedImage
src = ImageIO.read(new File(srcImage));
ColorSpace cs
= ColorSpace.getInstance(ColorSpace.CS_GRAY);
ColorConvertOp
op = new ColorConvertOp(cs, null);
src =
op.filter(src, null);
ImageIO.write(src,
imageFormat, new File(toPath));
} catch (Exception e) {
e.printStackTrace();
}
}
public void alphaWords2Image(String srcImagePath,
float alpha, String font,
int
fontStyle, int fontSize, Color color, String inputWords, int
x,
int y, String
imageFormat, String toPath) throws IOException {
FileOutputStream fos =
null;
try {
BufferedImage
image = ImageIO.read(new File(srcImagePath));
//创建java2D对象
Graphics2D
g2d = image.createGraphics();
//用源图像填充背景
g2d.drawImage(image,
0, 0, image.getWidth(), image.getHeight(),
null,
null);
//设置透明度
AlphaComposite
ac = AlphaComposite.getInstance(
AlphaComposite.SRC_OVER,
alpha);
g2d.setComposite(ac);
//设置文字字体名称、样式、大小
g2d.setFont(new
Font(font, fontStyle, fontSize));
g2d.setColor(color);//设置字体颜色
g2d.drawString(inputWords,
x, y); //输入水印文字及其起始x、y坐标
g2d.dispose();
fos = new
FileOutputStream(toPath);
ImageIO.write(image,
imageFormat, fos);
} catch (Exception e) {
e.printStackTrace();
} finally {
if (fos !=
null) {
fos.close();
}
}
}
public void alphaImage2Image(String srcImagePath,
String appendImagePath,
float alpha,
int x, int y, int width, int height,
String
imageFormat, String toPath) throws IOException {
FileOutputStream fos =
null;
try {
BufferedImage
image = ImageIO.read(new File(srcImagePath));
//创建java2D对象
Graphics2D
g2d = image.createGraphics();
//用源图像填充背景
g2d.drawImage(image,
0, 0, image.getWidth(), image.getHeight(),
null,
null);
//设置透明度
AlphaComposite
ac = AlphaComposite.getInstance(
AlphaComposite.SRC_OVER,
alpha);
g2d.setComposite(ac);
//设置水印图片的起始x/y坐标、宽度、高度
BufferedImage
appendImage = ImageIO.read(new File(appendImagePath));
g2d.drawImage(appendImage,
x, y, width, height, null, null);
g2d.dispose();
fos = new
FileOutputStream(toPath);
ImageIO.write(image,
imageFormat, fos);
} catch (Exception e) {
e.printStackTrace();
} finally {
if (fos !=
null) {
fos.close();
}
}
}
public void drawPoint(String srcImagePath, int x,
int y, int width,
int height,
Color ovalColor, String imageFormat, String toPath)
throws
IOException {
FileOutputStream fos =
null;
try {
//获取源图片
BufferedImage
image = ImageIO.read(new File(srcImagePath));
//根据xy点坐标绘制连接线
Graphics2D
g2d = image.createGraphics();
g2d.setColor(ovalColor);
//填充一个椭圆形
g2d.fillOval(x,
y, width, height);
fos = new
FileOutputStream(toPath);
ImageIO.write(image,
imageFormat, fos);
} catch (IOException e) {
e.printStackTrace();
} finally {
if (fos !=
null) {
fos.close();
}
}
}
public void drawPoints(String srcImagePath, List
pointList, int width,
int height,
Color ovalColor, String imageFormat, String toPath)
throws
IOException {
FileOutputStream fos =
null;
try {
//获取源图片
BufferedImage
image = ImageIO.read(new File(srcImagePath));
//根据xy点坐标绘制连接线
Graphics2D
g2d = image.createGraphics();
g2d.setColor(ovalColor);
//填充一个椭圆形
if (pointList
!= null) {
for
(int i = 0; i < pointList.size(); i++) {
Point
point = (Point) pointList.get(i);
int
x = (int) point.getX();
int
y = (int) point.getY();
g2d.fillOval(x,
y, width, height);
}
}
fos = new
FileOutputStream(toPath);
ImageIO.write(image,
imageFormat, fos);
} catch (IOException e) {
e.printStackTrace();
} finally {
if (fos !=
null) {
fos.close();
}
}
}
public void drawLine(String srcImagePath, int x1,
int y1, int x2, int y2,
Color
lineColor, String toPath, String imageFormat)
throws
IOException {
FileOutputStream fos =
null;
try {
//获取源图片
BufferedImage
image = ImageIO.read(new File(srcImagePath));
//根据xy点坐标绘制连接线
Graphics2D
g2d = image.createGraphics();
g2d.setColor(lineColor);
g2d.drawLine(x1,
y1, x2, y2);
fos = new
FileOutputStream(toPath);
ImageIO.write(image,
imageFormat, fos);
} catch (IOException e) {
e.printStackTrace();
} finally {
if (fos !=
null) {
fos.close();
}
}
}
public void drawPolyline(String srcImagePath,
int[] xPoints, int[] yPoints,
int nPoints,
Color lineColor, String toPath, String imageFormat)
throws
IOException {
FileOutputStream fos =
null;
try {
//获取源图片
BufferedImage
image = ImageIO.read(new File(srcImagePath));
//根据xy点坐标绘制连接线
Graphics2D
g2d = image.createGraphics();
//设置线条颜色
g2d.setColor(lineColor);
g2d.drawPolyline(xPoints,
yPoints, nPoints);
//图像写出路径
fos = new
FileOutputStream(toPath);
ImageIO.write(image,
imageFormat, fos);
} catch (IOException e) {
e.printStackTrace();
} finally {
if (fos !=
null) {
fos.close();
}
}
}
public void drawPolylineShowPoints(String
srcImagePath, int[] xPoints,
int[]
yPoints, int nPoints, Color lineColor, int width, int height,
Color
ovalColor, String toPath, String imageFormat)
throws
IOException {
FileOutputStream fos =
null;
try {
//获取源图片
BufferedImage
image = ImageIO.read(new File(srcImagePath));
//根据xy点坐标绘制连接线
Graphics2D
g2d = image.createGraphics();
//设置线条颜色
g2d.setColor(lineColor);
//画线条
g2d.drawPolyline(xPoints,
yPoints, nPoints);
//设置圆点颜色
g2d.setColor(ovalColor);
//画圆点
if (xPoints
!= null) {
for
(int i = 0; i < xPoints.length; i++) {
int
x = xPoints[i];
int
y = yPoints[i];
g2d.fillOval(x,
y, width, height);
}
}
//图像写出路径
fos = new
FileOutputStream(toPath);
ImageIO.write(image,
imageFormat, fos);
} catch (IOException e) {
e.printStackTrace();
} finally {
if (fos !=
null) {
fos.close();
}
}
}
public void drawPolygon(String srcImagePath,
int[] xPoints, int[] yPoints,
int nPoints,
Color polygonColor, String imageFormat, String toPath)
throws
IOException {
FileOutputStream fos =
null;
try {
//获取图片
BufferedImage
image = ImageIO.read(new File(srcImagePath));
//根据xy点坐标绘制闭合多边形
Graphics2D
g2d = image.createGraphics();
g2d.setColor(polygonColor);
g2d.drawPolygon(xPoints,
yPoints, nPoints);
fos = new
FileOutputStream(toPath);
ImageIO.write(image,
imageFormat, fos);
g2d.dispose();
} catch (Exception e) {
e.printStackTrace();
} finally {
if (fos !=
null) {
fos.close();
}
}
}
public void drawAndAlphaPolygon(String
srcImagePath, int[] xPoints,
int[]
yPoints, int nPoints, Color polygonColor, float alpha,
String
imageFormat, String toPath) throws IOException {
FileOutputStream fos =
null;
try {
//获取图片
BufferedImage
image = ImageIO.read(new File(srcImagePath));
//根据xy点坐标绘制闭合多边形
Graphics2D
g2d = image.createGraphics();
g2d.setColor(polygonColor);
//设置透明度
AlphaComposite
ac = AlphaComposite.getInstance(
AlphaComposite.SRC_OVER,
alpha);
g2d.setComposite(ac);
g2d.fillPolygon(xPoints,
yPoints, nPoints);
fos = new
FileOutputStream(toPath);
ImageIO.write(image,
imageFormat, fos);
g2d.dispose();
} catch (Exception e) {
e.printStackTrace();
} finally {
if (fos !=
null) {
fos.close();
}
}
}
public static void main(String[] args) throws
Exception {
OperateImage imageObj = new
OperateImage();
//图片融合的功能
//画面状的东西
//
String srcImagePath = "E:/tmp/20130822160831.png";
//
int[] xPoints = {20,100,160,270,500};
//
int[] yPoints = {30,150,172,295,615};
//
int nPoints = 5;
//
String toPath = "E:/tmp/test.png";
//
imageObj.drawPolygon(srcImagePath, xPoints,
yPoints, nPoints, Color.MAGENTA, "png", toPath);
//根据坐标数组绘制多边形
//
//
List pointList = new ArrayList();
//
Point p1 = new Point(60,80);
//
pointList.add(p1);
//
Point p2 = new Point(160,80);
//
pointList.add(p2);
//
Point p3 = new Point(60,180);
//
pointList.add(p3);
//
Point p4 = new Point(260,180);
//
pointList.add(p4);
//
Point p5 = new Point(460,380);
//
pointList.add(p5);
//
String srcImagePath =
"E:/tmp/20130822160831.png";
//
int width = 10;
//
int height = 10;
//
Color ovalColor = Color.RED;
//
String imageFormat = "png";
//
String toPath = "E:/tmp/test1.png";
//
imageObj.drawPoints(srcImagePath, pointList,
width, height, ovalColor, imageFormat, toPath);//画出一组(多个)点
;
//imageObj.cropImage(srcPath,
toPath, x, y, width,
height,readImageFormat,writeImageFormat);//剪切图片
//imageObj.resizeImage(srcPath,
toPath, 400, 400);//按指定的长宽重置图形大小
//imageObj.reduceImageByRatio(srcPath,
toPath, 3, 3);//按指定长和宽的比例缩小图形
//imageObj.enlargementImageByRatio(srcPath,
toPath, 2, 2);//按指定长和宽的比例放大图形
//imageObj.reduceImageEqualProportion(srcPath,
toPath, 4);//长高等比例缩小
//imageObj.enlargementImageEqualProportion(srcPath,
toPath, 2);//长高等比例放大
//imageObj.mergeBothImage(negativeImagePath,
additionImagePath, x, y, toPath); //按指定坐标合并图片
//imageObj.mergeBothImageTopleftcorner(negativeImagePath,
additionImagePath, toPath);//合并到左上角
//imageObj.mergeBothImageToprightcorner(negativeImagePath,
additionImagePath, toPath);//合并到右上角
//imageObj.mergeBothImageLeftbottom(negativeImagePath,
additionImagePath, toPath);//合并到左下角
//imageObj.mergeBothImageRightbottom(negativeImagePath,
additionImagePath, toPath);//合并到右下角
//imageObj.mergeBothImageCenter(negativeImagePath,
additionImagePath, toPath);//合并到正中央
//imageObj.mergeBothImageTopcenter(negativeImagePath,
additionImagePath, toPath);//合并到上边中央
//imageObj.mergeBothImageBottomcenter(negativeImagePath,
additionImagePath, toPath);//合并到下边中央
//imageObj.mergeBothImageLeftcenter(negativeImagePath,
additionImagePath, toPath);//合并到左边中央
//imageObj.mergeBothImageRightcenter(negativeImagePath,
additionImagePath, toPath);//合并到右边中央
//
String srcImage =
"E:/tmp/20130822160831.png";
//
String toPath = "E:/tmp/test2.png";
//
String imageFormat = "png";
//
imageObj.grayImage(srcImage, toPath,
imageFormat);//图片灰化
//
String firstSrcImagePath =
"E:/tmp/20130822160831.png";
//
String secondSrcImagePath =
"E:/tmp/mapimg123.png";
//
String imageFormat = "png";
//
String toPath = "E:/tmp/test5.png";
//
//imageObj.joinImagesHorizontal(firstSrcImagePath,
secondSrcImagePath, imageFormat, toPath);//横向拼接图片
//
imageObj.joinImagesHorizontal(firstSrcImagePath,
secondSrcImagePath, imageFormat, toPath);//横向拼接图片
//
String srcImagePath =
"E:/tmp/20130822160831.png";
//
String appendImagePath =
"E:/tmp/20130822160848.png";
//
float alpha = 1F;
//
String font = "宋体";
//
int fontStyle = Font.PLAIN;
//
int fontSize = 32;
//
Color color = Color.RED;
//
String inputWords = "图片上设置水印文字 ---- 宋体 普通字体 32号字
红色 透明度0.5";
//
int x = 20;
//
int y = 40;
//
String imageFormat = "jpg";
//
String toPath = "E:/tmp/test8.png";
//
//imageObj.alphaWords2Image(srcImagePath, alpha, font, fontStyle,
fontSize, color, inputWords, x, y, imageFormat, toPath);
//设置文字水印
//
imageObj.alphaImage2Image(srcImagePath,
appendImagePath, alpha, x, y, 300, 200, imageFormat,
toPath);//设置图片水印
//
String srcImagePath =
"E:/tmp/20130822160831.png";
//
int[] xPoints = {100,150,200,240,300};
//
int[] yPoints = {200,60,280,160,100};
//
int nPoints = 5;
//
Color lineColor = Color.RED;
//
String toPath = "E:/tmp/test7.png";
//
String imageFormat = "png";
//
imageObj.drawPolyline(srcImagePath, xPoints,
yPoints, nPoints, lineColor,toPath, imageFormat);//画折线
//
List pointList = new ArrayList();
//
Point p1 = new Point(60,80);
//
pointList.add(p1);
//
Point p2 = new Point(160,80);
//
pointList.add(p2);
//
Point p3 = new Point(60,180);
//
pointList.add(p3);
//
Point p4 = new Point(260,180);
//
pointList.add(p4);
//
Point p5 = new Point(460,380);
//
pointList.add(p5);
//
String srcImagePath =
"E:/tmp/20130822160831.png";
//
int width = 10;
//
int height = 10;
//
Color ovalColor = Color.RED;
//
String imageFormat = "png";
//
String toPath = "E:/tmp/test9.png";
//
imageObj.drawPoints(srcImagePath, pointList,
width, height, ovalColor, imageFormat, toPath);//画出一组(多个)点
//
//
int[] xPoints = {50,100,180,400,600};
//
int[] yPoints = {200,100,160,300,640};
//
int nPoints = 5;
//
Color lineColor = Color.PINK;
//
String srcImagePath =
"E:/tmp/20130822160831.png";
//
String toPath = "E:/tmp/test11.png";
//
imageObj.drawPolylineShowPoints(srcImagePath,
xPoints, yPoints, nPoints, lineColor, 10, 10, Color.RED, toPath,
"png");//画折线并突出显示点
//
//
String srcImagePath
="E:/tmp/20130822160831.png";
//
int[] xPoints ={50,90,180,320,640};
//
int[] yPoints ={200,300,120,240,360};
//
int nPoints = 5;
//
Color polygonColor = Color.PINK;
//
float alpha = (float) 0.2;
//
String imageFormat ="png";
//
String toPath ="E:/tmp/test12.png";
//
imageObj.drawAndAlphaPolygon(srcImagePath,
xPoints, yPoints, nPoints, polygonColor, alpha, imageFormat,
toPath);
//100 -- 45844
//1000 -- 411156
//叠加组合图像
//
第一次
第二次
第三次
//100张耗时(毫秒) --2003 1792 1869
1747
1871
1793
//1000张耗时(毫秒) --15334 15200 15236
15903 16028 15545
//10000张耗时(毫秒) --153010 153340
152673
154978 156506
154854
//如果list.size()<=100,则调用此方法,
//如果list.size()>100,则调用Jmagick的方法。
//String imageFormat =
"jpg";
//String toPath =
"D:/test/desk/16a_v1.jpg";
//imageObj.joinImageListHorizontal(iamgePathList,
imageFormat, toPath);
//
String str = "北京\n上海\n广州\n深圳";
//
System.out.println(str);
//
String path = "c:/relevantdata.txt";
//
FileOutputStream fops = new
FileOutputStream(path);
//
fops.write(str.getBytes());
//
//
BufferedReader inputStream = new
BufferedReader(new FileReader(new File(path)));
//
String mrMsg = "";
//
while((mrMsg =
inputStream.readLine())!=null){
//
System.out.println(mrMsg);
//
}
}
//数量 11 11x6
//纵向 375
//横向 391 3250
}