栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java图像处理

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java图像处理

基本图形
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);
	}
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/768905.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号