package com.wc;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.Random;
import javax.imageio.ImageIO;
public class DemoTest {
public static void main(String[] args) throws IOException {
BufferedImage img = new BufferedImage(600, 420, BufferedImage.TYPE_INT_ARGB);
Graphics g1 = img.getGraphics();
g1.setColor(Color.ORANGE);
g1.drawOval(50, 50, 100, 100);
g1.dispose();
ImageIO.write(img,"png",new File("c:/g1.png"));
Graphics2D g2 = img.createGraphics();
g2.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_GASP);
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g2.setRenderingHint(RenderingHints.KEY_STROKE_CONTROL, RenderingHints.VALUE_STROKE_DEFAULT);
g2.setColor(Color.RED);
// g2.setStroke(new BasicStroke(5));
// g2.drawOval(100, 100, 50, 50); //空心圆
// 画点
// g2.drawLine(150, 150, 150,150);
Random rand = new Random();
for (int i = 0; i <= 200; i++) {
//g2.setColor(new Color(rand.nextInt(255),rand.nextInt(255),rand.nextInt(255),rand.nextInt(50)+50));
g2.setColor(new Color(255,0,0,50)); //#ff0000
int x = rand.nextInt(600);
int y = rand.nextInt(400);
int sw = rand.nextInt(100);
int sh = rand.nextInt(100);
g2.fillOval(x, y, sw,sh);//实心圆
}
g2.dispose();
ImageIO.write(img, "png", new File("/c:/g2.png"));
}
}
import java.awt.Font;
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.Random;
import javax.imageio.ImageIO;
public class DemoTest {
public static void main(String[] args) throws IOException {
int w = 800;
int h = 800;
BufferedImage i = new BufferedImage(w, h, 2);
Graphics2D g = i.createGraphics();
g.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_GASP);
g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g.setRenderingHint(RenderingHints.KEY_STROKE_CONTROL, RenderingHints.VALUE_STROKE_DEFAULT);
g.setColor(Color.ORANGE);
g.fillRect(0, 0, w, h);
g.setColor(Color.BLACK);
g.fillArc(200, 200, 400, 400, 90, 180);
g.setColor(Color.WHITE);
g.fillArc(200, 200, 400, 400, 270, 180);
g.fillOval(300, 200, 200, 200);
g.setColor(Color.BLACK);
g.fillOval(300, 400, 200, 200);
g.fillOval(350, 250, 100, 100);
g.setColor(Color.WHITE);
g.fillOval(350, 450, 100, 100);
// 画字
Font font = new Font("zh74hfmss", Font.BOLD, 60);
Random rand = new Random();
g.setColor(new Color(rand.nextInt(255), rand.nextInt(255), rand.nextInt(255), rand.nextInt(255)));
g.setFont(font);
g.drawString("新年快乐 更近一步!", 120, 720);
g.dispose();
ImageIO.write(i, "png", new File("c:/ok.png"));
Runtime run = Runtime.getRuntime();
run.exec("cmd /k start c:/ok.png");
}
}
验证码
import java.awt.FontFormatException;
import java.awt.Point;
import java.awt.BasicStroke;
import java.awt.Font;
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.Random;
import java.awt.geom.GeneralPath;
import javax.imageio.ImageIO;
public class DemoTest {
public static void main(String[] args) throws IOException, FontFormatException {
int w = 160;
int h = 60;
int len = 5;
Random rand = new Random();
BufferedImage i = new BufferedImage(w, h, 2);
Graphics2D g = i.createGraphics();
g.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_GASP);
g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g.setRenderingHint(RenderingHints.KEY_STROKE_CONTROL, RenderingHints.VALUE_STROKE_DEFAULT);
g.setColor(new Color(251, 251, 251));
g.fillRect(0, 0, w, h);
Font font = Font.createFont(Font.TRUETYPE_FONT, new File(
"D:\阿里巴巴普惠体.ttf"));
font = font.deriveFont(Font.PLAIN, 55f);
g.setFont(font);
String str = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
double radianPercent = 0D;
for (int n = 0; n < 20; n++) {
font = font.deriveFont(Font.PLAIN, rand.nextFloat() * 15 + 15);
g.setFont(font);
g.setColor(new Color(rand.nextInt(255), rand.nextInt(255), rand.nextInt(255), rand.nextInt(10) + 50));
int x = rand.nextInt(w);
int y = rand.nextInt(h);
g.drawString(String.valueOf(str.charAt(rand.nextInt(str.length()))), x, y);
}
StringBuilder sok = new StringBuilder(len);
g.setColor(new Color(rand.nextInt(255), rand.nextInt(255), rand.nextInt(255), rand.nextInt(25) + 220));
for (int n = 0; n < len; n++) {
font = font.deriveFont(Font.PLAIN, rand.nextFloat() * 35 + 30);
g.setFont(font);
int x = n * 32 + 5;
int y = rand.nextInt(35) + 20;
radianPercent = Math.PI * (rand.nextInt(35) / 180D);
if (rand.nextBoolean())
radianPercent = -radianPercent;
g.rotate(radianPercent, x, y);
String sss = String.valueOf(str.charAt(rand.nextInt(str.length())));
sok.append(sss);
g.drawString(sss, x, y);
g.rotate(-radianPercent, x, y);
}
Point[] points = { new Point(0, 0), new Point(10, 50), new Point(30, 6), new Point(60, 55), new Point(80, 3),
new Point(160, 60)
};
GeneralPath path = new GeneralPath();
path.moveTo(points[0].x, points[0].y);
for (int i2 = 0; i2 < points.length - 1; ++i2) {
Point sp = points[i2];
Point ep = points[i2 + 1];
Point c1 = new Point((sp.x + ep.x) / 2, sp.y);
Point c2 = new Point((sp.x + ep.x) / 2, ep.y);
path.curveTo(c1.x, c1.y, c2.x, c2.y, ep.x, ep.y);
}
g.setStroke(new BasicStroke(rand.nextInt(6) + 2));
// g.draw(path);
g.setColor(new Color(rand.nextInt(255), rand.nextInt(255), rand.nextInt(255), rand.nextInt(25) + 220));
int yy = rand.nextInt(15) + 15;// y
int hh = rand.nextInt(20) + 10;// 高度
int aa = rand.nextInt(60) + 20;//
// x
for (int x = 10; x < w; x++) {
int y = (int) (yy + hh * Math.sin(x * Math.PI / aa));
// g.drawLine(x, (int) y, x, (int) y);
g.fillOval(x, y, 3, 3);
}
// 输出验证码
System.out.println(sok.toString());
g.dispose();
ImageIO.write(i, "png", new File("c:/ok.png"));
Runtime run = Runtime.getRuntime();
run.exec("cmd /k start c:/ok.png");
}
}
画直线、虚线、曲线
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.RenderingHints;
import java.awt.geom.GeneralPath;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.Random;
import javax.imageio.ImageIO;
public class DemoTest {
public static void main(String[] args) throws IOException {
int w = 800;
int h = 800;
BufferedImage i = new BufferedImage(w, h, 2);
Graphics2D g = i.createGraphics();
g.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_GASP);
g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g.setRenderingHint(RenderingHints.KEY_STROKE_CONTROL, RenderingHints.VALUE_STROKE_DEFAULT);
g.setColor(Color.ORANGE);
g.fillRect(0, 0, w, h);
g.setColor(Color.RED);
// g.drawLine(0, 0, w, h);
g.setStroke(new BasicStroke(3));
g.setColor(Color.WHITE);
for (int n = 0; n < 800; n++) {
int x = n;
n += 18;
g.drawLine(x, 400, x+5, 400);
}
g.drawOval(10, 20, 30,30);
g.drawRect(50, 50, 50, 50);
g.drawArc(100, 100, 100, 100, 0, 180);
Random rand = new Random();
for (int n = 0; n < 50; n++) {
g.setColor(new Color(255, 255, 255, 220));
g.drawArc(rand.nextInt(w),rand.nextInt(h),rand.nextInt(w)+20,rand.nextInt(h)+20,rand.nextInt(360),rand.nextInt(360));
}
// 画曲线
Point[] points = { new Point(0, 0), new Point(0, rand.nextInt(h)), new Point(w, rand.nextInt(h))
};
GeneralPath path = new GeneralPath();
path.moveTo(points[0].x, points[0].y);
for (int i2 = 0; i2 < points.length - 1; ++i2) {
Point sp = points[i2];
Point ep = points[i2 + 1];
Point c1 = new Point((sp.x + ep.x) / 2, sp.y);
Point c2 = new Point((sp.x + ep.x) / 2, ep.y);
path.curveTo(c1.x, c1.y, c2.x, c2.y, ep.x, ep.y);
}
g.draw(path);
for (int n = 0; n <= 355; n += 10) {
g.drawArc(100, 200, 600, 300, n, 5);
}
int yy = 100;// y
int hh = 100;// 高度
int aa = 200;//
// x
for (int x = 10; x < w; x += 15) {
int y = (int) (yy + hh * Math.sin(x * Math.PI / aa));
g.drawLine(x, (int) y, x, (int) y);
g.fillOval(x, y, 6, 6);
}
g.dispose();
ImageIO.write(i, "png", new File("c:/ok.png"));
Runtime run = Runtime.getRuntime();
run.exec("cmd /k start c:/ok.png");
}
}
黑白图像
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
public class DemoTest {
public static void main(String[] args) throws IOException {
String f = "D:/XYZ.jpg";// xxx_gray.jpg abc.png abc_gray.png
// 读取原来的图像
BufferedImage i = ImageIO.read(new File(f));
int w = i.getWidth();
int h = i.getHeight();
// 建立新图像,使用黑白效果
BufferedImage ii = new BufferedImage(w, h, 10);
Graphics2D g = ii.createGraphics();
g.drawImage(i, 0, 0, w, h, null);
g.setColor(new Color(0, 255, 0, 55));
g.fillRect(0, 0, w, h);
g.dispose();
String ext = f.substring(f.lastIndexOf("."));
String name = f.substring(0, f.lastIndexOf("."));
String newname = name + "_gray" + ext;
ImageIO.write(ii, "jpg", new File(newname));
}
}
原图片
处理后的图片
import java.awt.Color;
import java.awt.Font;
import java.awt.RenderingHints;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.File;
import javax.imageio.ImageIO;
public class DemoTest {
public static void main(String[] args) throws Exception {
String name = "d:/XYZ.jpg";
BufferedImage bar = ImageIO.read(new File(name));
Graphics2D g = bar.createGraphics();
g.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_GASP);
g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g.setRenderingHint(RenderingHints.KEY_STROKE_CONTROL, RenderingHints.VALUE_STROKE_DEFAULT);
g.setColor(new Color(255, 0, 0, 100));
Font font = Font.createFont(Font.TRUETYPE_FONT, new File("d:/阿里巴巴普惠体.ttf"));
font = font.deriveFont(80f);
font = font.deriveFont(Font.BOLD);
g.setFont(font);
String text = "明日之星";
int x = 30;
int y = 150;
g.drawString(text, x, y);
g.dispose();
String n1 = name.substring(0, name.lastIndexOf("."));
String n2 = name.substring(name.lastIndexOf("."));
String nn = n1 + "_text" + n2;
ImageIO.write(bar, "png", new File(nn));
Runtime run = Runtime.getRuntime();
run.exec("cmd /k start " + nn);
}
}
裁剪图像
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.image.BufferedImage;
import java.io.File;
import javax.imageio.ImageIO;
public class DemoTest {
public static void main(String[] args) throws Exception {
String name = "D:/XYZ.jpg";
BufferedImage src = ImageIO.read(new File(name));
int sw = src.getWidth();
int sh = src.getHeight();
int dw = 300;
int dh = (int) (sh * (1.0 * dw / sw));
dh = 300;
BufferedImage dst = new BufferedImage(dw, dh, 1);
Graphics2D g = dst.createGraphics();
g.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_GASP);
g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g.setRenderingHint(RenderingHints.KEY_STROKE_CONTROL, RenderingHints.VALUE_STROKE_DEFAULT);
// g.setColor(Color.BLUE);
// g.fillRect(0, 0, dw, dh);
// g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, .5f));
// g.drawImage(src, 0, 0, dw, dh, null);
int x = 300;
int y = 60;
g.drawImage(src, 0, 0, dw, dh, x, y, x + dw, dh + y, null);
g.dispose();
String n1 = name.substring(0, name.lastIndexOf("."));
String n2 = name.substring(name.lastIndexOf("."));
String nn = n1 + "_ok" + n2;
ImageIO.write(dst, name.substring(name.lastIndexOf(".") + 1), new File(nn));
Runtime run = Runtime.getRuntime();
run.exec("cmd /k start " + nn);
}
}
缩略图效果和改变图像尺寸
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.image.BufferedImage;
import java.io.File;
import javax.imageio.ImageIO;
public class DemoTest {
public static void main(String[] args) throws Exception {
String name = "D:/XYZ.jpg";
BufferedImage src = ImageIO.read(new File(name));
int sw = src.getWidth();
int sh = src.getHeight();
int dw = 350;
int dh = (int) (sh * (1.0 * dw / sw));
//dh = 300;
dw = 350;
dh = 350;
BufferedImage dst = new BufferedImage(dw, dh, 1);
Graphics2D g = dst.createGraphics();
g.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_GASP);
g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g.setRenderingHint(RenderingHints.KEY_STROKE_CONTROL, RenderingHints.VALUE_STROKE_DEFAULT);
// g.setColor(Color.BLUE);
// g.fillRect(0, 0, dw, dh);
// g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, .5f));
g.drawImage(src, 0, 0, dw, dh, null);
g.dispose();
String n1 = name.substring(0, name.lastIndexOf("."));
String n2 = name.substring(name.lastIndexOf("."));
String nn = n1 + String.format("_ok(%d_%d)",dw,dh) + n2;
ImageIO.write(dst, name.substring(name.lastIndexOf(".") + 1), new File(nn));
Runtime run = Runtime.getRuntime();
run.exec("cmd /k start " + nn);
}
}



