2019独角兽企业重金招聘Python工程师标准>>>

package io.renren.common.utils;import cn.hutool.core.lang.Console;
import io.renren.modules.oss.cloud.OSSFactory;import javax.imageio.ImageIO;
import javax.imageio.stream.ImageOutputStream;
import java.awt.*;
import java.awt.geom.Ellipse2D;
import java.awt.image.BufferedImage;
import java.io.*;
import java.net.URL;public class ImageUtil {static final String IMAGE_SUFFIX = ".png";static final int HEAD_URL_WIDTH = 100;static final int HEAD_URL_HEIGHT = 100;/*** @param posterImgUrl     海报* @param tempQrCodeImgUrl 临时二维码* @param headImgUrl       头像* @return 合成图片地址*/public static String drawImage(String posterImgUrl, String tempQrCodeImgUrl, String headImgUrl) throws IOException {BufferedImage posterBufImage = ImageIO.read(new URL(posterImgUrl));Graphics2D posterBufImageGraphics = posterBufImage.createGraphics();BufferedImage qrCodeImage = ImageIO.read(new URL(tempQrCodeImgUrl));BufferedImage headImage = ImageIO.read(new URL(headImgUrl));//设置圆形头像BufferedImage roundHeadImg = new BufferedImage(headImage.getWidth(), headImage.getHeight(), BufferedImage.TYPE_INT_RGB);Graphics2D roundHeadGraphics = roundHeadImg.createGraphics();Ellipse2D.Double shape = new Ellipse2D.Double(0, 0, roundHeadImg.getWidth(), roundHeadImg.getHeight());roundHeadGraphics.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);roundHeadImg = roundHeadGraphics.getDeviceConfiguration().createCompatibleImage(headImage.getWidth(), headImage.getHeight(),Transparency.TRANSLUCENT);roundHeadGraphics = roundHeadImg.createGraphics();// 使用 setRenderingHint 设置抗锯齿roundHeadGraphics.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);roundHeadGraphics.setClip(shape);roundHeadGraphics.drawImage(headImage, 0, 0, null);roundHeadGraphics.dispose();posterBufImageGraphics.drawImage(qrCodeImage, (posterBufImage.getWidth() - qrCodeImage.getWidth()), 10, qrCodeImage.getWidth(), qrCodeImage.getHeight(), null);posterBufImageGraphics.drawImage(roundHeadImg, 50, 100, HEAD_URL_WIDTH, HEAD_URL_HEIGHT, null);posterBufImageGraphics.dispose();ByteArrayOutputStream bs = new ByteArrayOutputStream();ImageOutputStream imgOut = ImageIO.createImageOutputStream(bs);ImageIO.write(posterBufImage, "png", imgOut);InputStream inSteam = new ByteArrayInputStream(bs.toByteArray());String url = OSSFactory.build().uploadSuffix(inSteam, IMAGE_SUFFIX);return url;//返回合成的图片地址url}public static void drawImage() throws IOException {//海报图String backgroundImageUrl = "http://img1.juimg.com/171010/330841-1G01000050879.jpg";//二维码String qrCodeImageUrl = "https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1553504957130&di=02fae20a5c0f885d52299b2b1d682c86&imgtype=0&src=http%3A%2F%2Fimg.atobo.com%2FProductImg%2FEWM%2FUWeb%2F3%2F2%2F1%2F3%2F061%2F3213061%2F1.gif";//头像String headUrl = "http://pic.51yuansu.com/pic3/cover/00/63/25/589bdedf5475d_610.jpg";BufferedImage bgBufImage = ImageIO.read(new URL(backgroundImageUrl));Graphics2D bgBufImageGraphics = bgBufImage.createGraphics();BufferedImage qrCodeImage = ImageIO.read(new URL(qrCodeImageUrl));BufferedImage headImage = ImageIO.read(new URL(headUrl));//设置圆形图片BufferedImage roundHeadImg = new BufferedImage(headImage.getWidth(), headImage.getHeight(), BufferedImage.TYPE_INT_RGB);Graphics2D roundHeadGraphics = roundHeadImg.createGraphics();Ellipse2D.Double shape = new Ellipse2D.Double(0, 0, roundHeadImg.getWidth(), roundHeadImg.getHeight());roundHeadGraphics.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);roundHeadImg = roundHeadGraphics.getDeviceConfiguration().createCompatibleImage(headImage.getWidth(), headImage.getHeight(),Transparency.TRANSLUCENT);roundHeadGraphics = roundHeadImg.createGraphics();// 使用 setRenderingHint 设置抗锯齿roundHeadGraphics.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);roundHeadGraphics.setClip(shape);roundHeadGraphics.drawImage(headImage, 0, 0, null);roundHeadGraphics.dispose();bgBufImageGraphics.drawImage(qrCodeImage, (bgBufImage.getWidth() - qrCodeImage.getWidth()), 10, qrCodeImage.getWidth(), qrCodeImage.getHeight(), null);bgBufImageGraphics.drawImage(roundHeadImg, 50, 100, HEAD_URL_WIDTH, HEAD_URL_HEIGHT, null);bgBufImageGraphics.dispose();ImageIO.write(bgBufImage, "png", new File("E:\\demo1.png"));Console.log("生成图片完成");}public static void main(String[] args) throws IOException {//海报图String backgroundImageUrl = "http://img1.juimg.com/171010/330841-1G01000050879.jpg";//二维码String qrCodeImageUrl = "https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1553504957130&di=02fae20a5c0f885d52299b2b1d682c86&imgtype=0&src=http%3A%2F%2Fimg.atobo.com%2FProductImg%2FEWM%2FUWeb%2F3%2F2%2F1%2F3%2F061%2F3213061%2F1.gif";//头像String headUrl = "http://pic.51yuansu.com/pic3/cover/00/63/25/589bdedf5475d_610.jpg";String url = ImageUtil.drawImage(backgroundImageUrl, qrCodeImageUrl, headUrl);Console.log("url={}",url);}}

转载于:https://my.oschina.net/u/2426590/blog/3027726

java合成海报的工具类相关推荐

  1. java合成海报的工具类(二维码、头像、海报)

    参考网站 https://my.oschina.net/u/2426590/blog/3027726 java Graphics2D绘制文字并居中并解决服务器乱码问题 https://blog.csd ...

  2. java图片缩放工具类,一个JAVA图形缩放处置工具类

    一个JAVA图形缩放处理工具类 调用的例子 import java.io.FileOutputStream; import java.io.IOException; import javax.imag ...

  3. JAVA I/O流工具类TextFile

    JAVA I/O流工具类TextFile由广州疯狂软件java培训分享: 本文是一个TextFile类,通过这个类我们可以调用其中的方法来简化对文件的读写,这段代码的可用性比较强.这个TextFile ...

  4. java redis remove_最全的Java操作Redis的工具类

    RedisUtil 当前版本:1.1 增加更全的方法,对以前的部分方法进行了规范命名,请放心替换成新版本. 介绍 最全的Java操作Redis的工具类,使用StringRedisTemplate实现, ...

  5. java图形验证码生成工具类

    转载自   java图形验证码生成工具类 生成验证码效果       ValidateCode.java 验证码生成类 package cn.dsna.util.images; import java ...

  6. java 代理ip工具类_Java基础之java处理ip的工具类

    java处理ip的工具类,包括把long类型的Ip转为一般Ip类型.把xx.xx.xx.xx类型的转为long类型.根据掩码位获取掩码.根据 ip/掩码位 计算IP段的起始IP.根据 ip/掩码位 计 ...

  7. java练习(数组工具类的封装)[目前写过最长的代码,虽然不难]

    java练习(数组工具类的封装)[目前写过最长的代码,虽然不难] package myUtil.arrayUtil;public class ArraysUtil {/*** 升序排列一个byte数组 ...

  8. java工具类应该抛异常吗,java学习阶段一 工具类(异常)

    java学习阶段一 工具类(异常) 介绍 异常:运行期间出现的错误 背离程序本身意图的表现 基本知识 异常的分类 根类 Throwable Error 程序无法处理的错误 表示运行应用程序中教严重的问 ...

  9. java Excel导入导出工具类 及使用demo

    java Excel导入导出工具类 及使用demo 前言:相信进来的都是想尽快解决问题的,话不多说,按照以下步骤来,可以操作导出excel到本地,导入同理,自行学习.步骤一:直接复制以下excel工具 ...

最新文章

  1. python程序设计与科学计算pdf_用Python做科学计算 pdf版
  2. Linux bc 命令简单学习
  3. OAuth2.0 微信授权机制
  4. hiveserver2启动不起来_汽车一键启动只能用来打火吗 车主必须知道的几个“隐藏”技巧!...
  5. 高级软件工程课程总结
  6. 【java_设计模式】建造者模式
  7. 【论文泛读85】基于上下文的句子相似度
  8. 为什么E-GREEDY算法中e越小,性能会更好
  9. 算法mips与mcps 的分析
  10. OpenCV中GPU版MOG2的使用
  11. 【C++学习笔记】C++文件操作
  12. 迪克斯特拉算法——算法图解
  13. 第二章 编写MBR主引导记录
  14. 防撤回神器,免ROOT查看撤回消息!再也不用担心错过劲爆消息!
  15. 免费版的mp3格式转换器有哪些?这三款软件帮你实现!
  16. x 的 x 次方等于10,求 x
  17. 什么是ajax?ajax详解
  18. Revit MEP中如何利用API实现把弯头链接到风管上
  19. 抖音短视频发布软件 短视频辅助发布工具
  20. C51单片机按键控制流水灯模式(定时器版本)以及定时器时钟

热门文章

  1. REXROTH力士乐溢流阀ZDB6VP2-42/315V
  2. 1.5输出图案(由*组成的图形·)C程序设计第四版(谭浩强)
  3. 关于SAP 打印时 特殊字符的输出
  4. mysql8.0查看用户的密码策略_MySQL8.0 密码管理与密码策略
  5. 基于Dragonboard 410c的燃气烟雾检测器(四)
  6. nvidia显卡驱动程序旧版本下载
  7. XML scriptlet 连接数据库
  8. unity 黑魂 开发日志3
  9. 关于MySQL : CREATE TABLE if not exists xxx/ALTER TABLE xxx ADD COLUMN IF NOT EXISTS xxx语法使用注意
  10. 纯css DIV弹出动画