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


import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.geom.AffineTransform;
import java.awt.image.AffineTransformOp;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;import javax.imageio.ImageIO;import org.apache.commons.lang3.StringUtils;/*** 该类是图片处理类* */
public final class ImageUtil {private ImageUtil() {}
/*** 生成组合头像* * [@param](https://my.oschina.net/u/2303379) paths*            用户图像* [@throws](https://my.oschina.net/throws) IOException*/public static File getCombinationOfhead(List<String> paths,String outPath)throws IOException {List<BufferedImage> bufferedImages = new ArrayList<BufferedImage>();int subHeight = 28;int subWidth = 28;if(paths.size() <= 0 || paths.size() > 9){return null;}if(paths.size() == 1){subHeight = 60;subWidth = 60;}else if(paths.size() == 2){subHeight = 40;subWidth = 40;}// 压缩图片所有的图片生成尺寸同意的 为 60x60for (int i = 0; i < paths.size(); i++) {if(StringUtils.isBlank(paths.get(i))){break;}bufferedImages.add(ImageUtil.resize2(paths.get(i), subHeight, subWidth, true));}int width = 100; // 这是画板的宽高int height = 100; // 这是画板的高度// BufferedImage.TYPE_INT_RGB可以自己定义可查看APIBufferedImage outImage = new BufferedImage(width, height,BufferedImage.TYPE_INT_RGB);// 生成画布Graphics g = outImage.getGraphics();Graphics2D g2d = (Graphics2D) g;// 设置背景色g2d.setBackground(new Color(231,231,231));// 通过使用当前绘图表面的背景色进行填充来清除指定的矩形。g2d.clearRect(0, 0, width, height);// 开始拼凑 根据图片的数量判断该生成那种样式的组合头像目前为4中int j = 1;int k = 1;for (int i = 1; i <= bufferedImages.size(); i++) {if (bufferedImages.size() == 9) {if (i <= 3) {g2d.drawImage(bufferedImages.get(i - 1), subHeight*(i-1) + 4*i, 4, null);} else if(i > 3 && i<=6){g2d.drawImage(bufferedImages.get(i - 1), subHeight*(j-1) + 4*j, subWidth+4*2, null);j++;}else{g2d.drawImage(bufferedImages.get(i - 1), subHeight*(k-1) + 4*k, subWidth*2+16, null);k++;}}if (bufferedImages.size() == 8) {if (i <= 3) {g2d.drawImage(bufferedImages.get(i - 1), (subHeight) * (i-1) + 4*i, 4, null);} else if(i > 3 && i<=6){g2d.drawImage(bufferedImages.get(i - 1), (subHeight) * (j-1) + 4*j, 36, null);j++;}else{g2d.drawImage(bufferedImages.get(i - 1), (subHeight+4)*(k-1)+20, subWidth*2+ 4*3, null);k++;}}if (bufferedImages.size() == 7) {if (i <= 3) {g2d.drawImage(bufferedImages.get(i - 1), (subHeight) * (i-1) + 4*i, 4, null);} else if(i > 3 && i<=6){g2d.drawImage(bufferedImages.get(i - 1), (subHeight) * (j-1) + 4*j, 36, null);j++;}else{g2d.drawImage(bufferedImages.get(i - 1), subHeight+8, subWidth*2+ 4*3, null);k++;}}if (bufferedImages.size() == 6) {if (i <= 3) {g2d.drawImage(bufferedImages.get(i - 1), (subHeight) * (i-1) + 4*i, 20, null);} else {g2d.drawImage(bufferedImages.get(i - 1), (subHeight) * (j-1) + 4*j, 52, null);j++;}}else if (bufferedImages.size() == 5) {if (i <= 2) {g2d.drawImage(bufferedImages.get(i - 1), (subHeight+4) * (i-1) + 20, 20, null);} else {g2d.drawImage(bufferedImages.get(i - 1), (subHeight) * (j-1) + 4*j, 52, null);j++;}}else if (bufferedImages.size() == 4) {if (i <= 2) {g2d.drawImage(bufferedImages.get(i - 1), (subHeight+4) * (i-1) + 20, 20, null);} else {g2d.drawImage(bufferedImages.get(i - 1), (subHeight+4) * (j-1) + 20, 52, null);j++;}} else if (bufferedImages.size() == 3) {g2d.drawImage(bufferedImages.get(i - 1), subHeight * i + 4 * i- subHeight, 36, null);} else if (bufferedImages.size() == 2) {g2d.drawImage(bufferedImages.get(i - 1), subHeight * i + 4 +4 * i - subHeight,30, null);} else if (bufferedImages.size() == 1) {g2d.drawImage(bufferedImages.get(i - 1), 20, 20, null);}// 需要改变颜色的话在这里绘上颜色。可能会用到AlphaComposite类}String format = "JPG";File file = new File(outPath);ImageIO.write(outImage, format, file);return file;}/*** 图片缩放* * [@param](https://my.oschina.net/u/2303379) filePath*            图片路径* [@param](https://my.oschina.net/u/2303379) height*            高度* [@param](https://my.oschina.net/u/2303379) width*            宽度* @param bb*            比例不对时是否需要补白*/public static BufferedImage resize2(String filePath, int height, int width,boolean bb) {try {double ratio = 0; // 缩放比例//File f = new File(filePath);URL url = new URL(filePath);BufferedImage bi = ImageIO.read(url);Image itemp = bi.getScaledInstance(width, height,Image.SCALE_SMOOTH);// 计算比例if ((bi.getHeight() > height) || (bi.getWidth() > width)) {if (bi.getHeight() > bi.getWidth()) {ratio = (new Integer(height)).doubleValue()/ bi.getHeight();} else {ratio = (new Integer(width)).doubleValue() / bi.getWidth();}AffineTransformOp op = new AffineTransformOp(AffineTransform.getScaleInstance(ratio, ratio), null);itemp = op.filter(bi, null);}if (bb) {// copyimg(filePath, "D:\\img");BufferedImage image = new BufferedImage(width, height,BufferedImage.TYPE_INT_RGB);Graphics2D g = image.createGraphics();g.setColor(Color.white);g.fillRect(0, 0, width, height);if (width == itemp.getWidth(null))g.drawImage(itemp, 0, (height - itemp.getHeight(null)) / 2,itemp.getWidth(null), itemp.getHeight(null),Color.white, null);elseg.drawImage(itemp, (width - itemp.getWidth(null)) / 2, 0,itemp.getWidth(null), itemp.getHeight(null),Color.white, null);g.dispose();itemp = image;}return (BufferedImage) itemp;} catch (IOException e) {e.printStackTrace();}return null;}public static void main(String[] args) throws IOException{String outPath = "E:\\c.png";List<String> list = new ArrayList<String>();list.add("");
//        String format = "PNG";
//      ImageIO.write(resize2(filePath,200,200,false), format, new File(outPath));getCombinationOfhead(list,outPath);} }

转载于:https://my.oschina.net/wangchongya/blog/876112

Java生成微信群组图标相关推荐

  1. 仿微信群组头像组合边框实现

    由于项目需要展示头像跟微信群组那样的组合,网上搜了一堆都不太符合要求,额,可能没有找到吧 下面就分享一个自己整合的头像合成工具类: 先说一下实现思路和步骤: (1)首先要创建一张空白的大图片 (2)根 ...

  2. android 仿QQ,微信群组里的@功能,支持@多人,并能一键删除,能获取上传对应的id(修改版)

    首先注明该文章是借签别人的博客,原文博文地址点击打开链接 android 仿QQ,微信群组里的@功能,支持@多人,并能一键删除,能获取上传对应的id 这个需求来源:本人做集成环信聊天时,项目需要@功能 ...

  3. Java生成微信小程序二维码

    Java生成微信小程序二维码 import java.io.BufferedInputStream; import java.io.BufferedReader; import java.io.Byt ...

  4. 一行实现QQ群组头像,微信群组,圆角等效果. 并支持url直接加载图片

    说点题外话. Coding中我们总是经历着这么几个过程. 学会使用: 不管是API也好, 开源库也好. 总是在最开始的学会去用. 了解实现原理: 可能会因为一些不兼容, 代码的异常状态的处理不够完美等 ...

  5. FastDFS+java九宫格微信群聊头像

    参考的工具类出自博客:https://www.jianshu.com/p/394f9b0357b3 我仅仅只是改了下:通过getCombinationOfhead方法返回的是 byte[] 字节数组, ...

  6. java 头像 微信群_java实现仿微信群组合头像

    java实现仿微信群组合头像 来源:互联网  宽屏版  评论 2016-05-28 12:54:16 java实现仿微信群组合头像package com.zovon.util;import java. ...

  7. java 头像 微信群_仿微信群头像九宫格控件 LQRNineGridImageView

    软件介绍 仿微信群头像九宫格控件 一.简介: 参照Android 仿微信群聊头像文章学习开发的一个仿微信群头像九宫格控件,感谢博主Loften_93663469. 效果如下: 二.使用: 1.在自己项 ...

  8. python企业微信群聊_python3企业微信群组报警

    公司提出一个需求需要做一个企业微信的一个消息推送,需要将消息发送到聊天群里详细信息如下. 如何创建应用请阅读我的上篇文章:https://www.cnblogs.com/wangyajunblog/p ...

  9. 大数据+java交流微信群

    一起进行大数据+Java的知识传递与分享,快来加入吧!! 本人程序员,发现身边很多朋友经常会问一些技术问题,特建立微信群供全国各地的朋友一起讨论学习,资源共享,本人也积累了很多专业性的资料,不定期分享 ...

最新文章

  1. List和List的区别?
  2. SQL Server Cast、Convert数据类型转换
  3. 使用MeanJS Yeoman Generator
  4. css盒模型中margin很牛逼
  5. UNIX网络编程笔记(4):简单的回射程序
  6. activiti 设置可选处理人_新品速递|高端系列!慧明DF系列线性相位处理专业音箱处理器...
  7. oracle在linux上使用裸设备,在linux下构建基于LVM的裸设备数据库
  8. JavaScript的可变参数介绍
  9. MySQL show 语句
  10. 蓝桥杯官网 试题 基础练习 阶乘计算(C++ 高精度)
  11. Luogu1527[国家集训队]矩阵乘法
  12. 服务器至强系列cpu排行,至强系列cpu天梯图2020 英特尔至强cpu天梯图排名
  13. 什么是蜘蛛池?有什么作用?
  14. 录音文件怎么转换成mp3格式
  15. Banner 怎么实现轮播不同尺寸的图片
  16. springboot结合注解动态获取数据库表
  17. RobotFramework相关
  18. (每日一练c++)统计某一单科成绩各分数段的分布人数
  19. 解决 win10 桌面 资源管理器未响应
  20. torchtext field.build_vocab问题

热门文章

  1. mysql(十)条件语句、循环语句、动态执行SQL语句
  2. 花1亿扶持优质红人,如涵推动网红经济出圈之路有何深意?
  3. AI 量化机器人,人工智能如何助你从股市发家?
  4. ExecutorCompletionService
  5. Java下载文件时文件名出现乱码(但文件内容正常)
  6. python--测试使用不同的方式计算位涡平流项的差异
  7. android AlarmManager详解,Alarm的设定和取消。
  8. 以Java工程师为例,技术面试应该怎么准备?
  9. 计算机软件可以用虚拟串口吗,虚拟串口以及在Proteus中的使用
  10. python中调用linux命令报错cat: -: Bad file descriptor