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

packagecom.zovon.util;importjava.awt.AlphaComposite;importjava.awt.Color;importjava.awt.Font;importjava.awt.Graphics;importjava.awt.Graphics2D;importjava.awt.Image;importjava.awt.geom.AffineTransform;importjava.awt.image.AffineTransformOp;importjava.awt.image.BufferedImage;importjava.io.BufferedInputStream;importjava.io.BufferedOutputStream;importjava.io.File;importjava.io.FileInputStream;importjava.io.FileNotFoundException;importjava.io.FileOutputStream;importjava.io.IOException;importjava.io.InputStream;importjava.io.OutputStream;importjava.util.ArrayList;importjava.util.List;importjavax.imageio.ImageIO;/*** 该类是图片处理类

*

*@author王永丰

* 出处:http://www.cnblogs.com/zovon/p/4345501.html*/

public final classImageUtil {/**图片格式:JPG*/

private static final String PICTRUE_FORMATE_JPG = "jpg";privateImageUtil() {

}/*** 生成组合头像

*

*@parampaths

* 用户图像

*@throwsIOException*/

public static void getCombinationOfhead(Listpaths)throwsIOException {

List bufferedImages = new ArrayList();//压缩图片所有的图片生成尺寸同意的 为 50x50

for (int i = 0; i < paths.size(); i++) {

bufferedImages.add(ImageUtil.resize2(paths.get(i),50, 50, true));

}int width = 112; //这是画板的宽高

int height = 112; //这是画板的高度//BufferedImage.TYPE_INT_RGB可以自己定义可查看API

BufferedImage outImage= newBufferedImage(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;for (int i = 1; i <= bufferedImages.size(); i++) {if (bufferedImages.size() == 4) {if (i <= 2) {

g2d.drawImage(bufferedImages.get(i- 1), 50 * i + 4 *i- 50, 4, null);

}else{

g2d.drawImage(bufferedImages.get(i- 1), 50 * j + 4 *j- 50, 58, null);

j++;

}

}else if (bufferedImages.size() == 3) {if (i <= 1) {

g2d.drawImage(bufferedImages.get(i- 1), 31, 4, null);

}else{

g2d.drawImage(bufferedImages.get(i- 1), 50 * j + 4 *j- 50, 58, null);

j++;

}

}else if (bufferedImages.size() == 2) {

g2d.drawImage(bufferedImages.get(i- 1), 50 * i + 4 * i - 50,31, null);

}else if (bufferedImages.size() == 1) {

g2d.drawImage(bufferedImages.get(i- 1), 31, 31, null);

}//需要改变颜色的话在这里绘上颜色。可能会用到AlphaComposite类

}

String outPath= "E:\\b.jpg";

String format= "JPG";

ImageIO.write(outImage, format,newFile(outPath));

}/*** 图片缩放

*

*@paramfilePath

* 图片路径

*@paramheight

* 高度

*@paramwidth

* 宽度

*@parambb

* 比例不对时是否需要补白*/

public static BufferedImage resize2(String filePath, int height, intwidth,booleanbb) {try{double ratio = 0; //缩放比例

File f = newFile(filePath);

BufferedImage bi=ImageIO.read(f);

Image itemp=bi.getScaledInstance(width, height,

Image.SCALE_SMOOTH);//计算比例

if ((bi.getHeight() > height) || (bi.getWidth() >width)) {if (bi.getHeight() >bi.getWidth()) {

ratio= (newInteger(height)).doubleValue()/bi.getHeight();

}else{

ratio= (new Integer(width)).doubleValue() /bi.getWidth();

}

AffineTransformOp op= newAffineTransformOp(

AffineTransform.getScaleInstance(ratio, ratio),null);

itemp= op.filter(bi, null);

}if(bb) {//copyimg(filePath, "D:\\img");

BufferedImage image = newBufferedImage(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;

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值