IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> 记一个小程序在后台通过Graphics2D 画图生成海报,并转换为base64返回前端使用到的封装方法 对图片进行操作 -> 正文阅读

[移动开发]记一个小程序在后台通过Graphics2D 画图生成海报,并转换为base64返回前端使用到的封装方法 对图片进行操作

1.将图片切割为圆形

/**
 * 将图片切成圆形
 * @param bi1
 * @return
 */
public static BufferedImage gardenImage(BufferedImage bi1) {
	BufferedImage bi2;
	// 读取图片
	bi2 = new BufferedImage(bi1.getWidth(), bi1.getHeight(),
			BufferedImage.TYPE_INT_RGB);
	Ellipse2D.Double shape = new Ellipse2D.Double(0, 0, bi1.getWidth(), bi1
			.getHeight());
	Graphics2D g2 = bi2.createGraphics();
	g2.setBackground(Color.WHITE);
	g2.fill(new Rectangle(bi2.getWidth(), bi2.getHeight()));
	g2.setClip(shape);
	//设置抗锯齿
	g2.drawImage(bi1, 0, 0, null);
	g2.dispose();
	return bi2;
}

2.向图片写入文字

/**
* @param str
 *            生产的图片文字
 * @param width
 *            图片横向位置
 * @param height
 *            图片纵向位置
 * @param fontSize
 *            文字大小
 * @return
 * @throws IOException
 */
public static Graphics2D create(String str, Image image,int width, int height, Graphics2D g2,int fontSize, Color color ){
	BufferedImage bufferedImage = toBufferedImage(image);
	//这里减去25是为了防止字和图重合
	g2.drawImage(image, 0, 0, bufferedImage.getWidth() - 25, bufferedImage.getHeight() - 25, null);
	/* 设置生成图片的文字样式 * */
	Font font = new Font("黑体", Font.BOLD, fontSize);
	g2.setFont(font);
	g2.setPaint(color);

	/* 设置字体在图片中的位置 在这里是居中* */
	FontRenderContext context = g2.getFontRenderContext();
	Rectangle2D bounds = font.getStringBounds(str, context);
	double y = height;
	double ascent = -bounds.getY();
	double baseY = y + ascent;

	/* 防止生成的文字带有锯齿 * */
	g2.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);

	/* 在图片上生成文字 * */
	g2.drawString(str, width, (int) baseY);

	return g2;
}

3.将Image 转为 BufferedImage

/**
 * 将Image 转为 BufferedImage
 * @param image
 * @return
 */
public static BufferedImage toBufferedImage(Image image) {
	if (image instanceof BufferedImage) {
		return (BufferedImage)image;
	}
	image = new ImageIcon(image).getImage();
	BufferedImage bimage = null;
	GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
	try {
		int transparency = Transparency.OPAQUE;
		GraphicsDevice gs = ge.getDefaultScreenDevice();
		GraphicsConfiguration gc = gs.getDefaultConfiguration();
		bimage = gc.createCompatibleImage(
				image.getWidth(null), image.getHeight(null), transparency);
	} catch (HeadlessException e) {

	}
	if (bimage == null) {
		int type = BufferedImage.TYPE_INT_RGB;
		bimage = new BufferedImage(image.getWidth(null), image.getHeight(null), type);
	}
	Graphics g = bimage.createGraphics();

	g.drawImage(image, 0, 0, null);
	g.dispose();

	return bimage;
}

4.将字节数组转为image对象

/**
 * 将字节数组转换为image对象
 * @param bytes
 * @return
 * @throws Exception
 */
public static Image byteToFile(byte[] bytes) throws Exception {
	ByteArrayInputStream bis = new ByteArrayInputStream(bytes);
	Iterator<?> readers = ImageIO.getImageReadersByFormatName("jpg");
	Image image = null;
	try {
		ImageReader reader = (ImageReader) readers.next();
		Object source = bis;
		ImageInputStream iis = ImageIO.createImageInputStream(source);
		reader.setInput(iis, true);
		ImageReadParam param = reader.getDefaultReadParam();

		image = reader.read(0, param);
	} catch (Exception e) {
		e.printStackTrace();
	} finally {
		bis.close();
	}
	return image;
}

5.将InputStream流转换为byte数组

/**
 * 将InputStream流转换为byte数组
 * @param in
 * @return
 * @throws IOException
 */
private byte[] getBytes(InputStream in) throws IOException {
	ByteArrayOutputStream swapStream = new ByteArrayOutputStream();
	byte[] buff = new byte[100];
	int rc = 0;
	while ((rc = in.read(buff, 0, 100)) > 0) {
		swapStream.write(buff, 0, rc);
	}
	return swapStream.toByteArray();
}
  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-11-26 08:57:51  更:2021-11-26 08:58:46 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 5:38:18-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码