`
zyn010101
  • 浏览: 325109 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

仿微信9宫格群组头像

阅读更多
开发了一个聊天工具,群组头像像仿照微信的头像那样显示成员头像合成图片,百度了一下,发现没有顺手的,就自己动手写了一个,现在分享给大家。
我所有用户图片都是120*120的,合成图片为132*132,九宫格的话用户图片边到合成图片边为3,依次类推,里面的120,132,40,30等大小根据自己的头像大小灵活变动即可
public static String[] getXy(int size){
		String[] s = new String[size];
		int _x = 0;
		int _y = 0;
		if(size ==1){
			_x = _y = 6;
			s[0] = "6,6";
		}
		if(size == 2){
			_x =_y = 4;
			s[0] = "4,"+(132/2-60/2);
			s[1] = 60+2*_x+","+ (132/2-60/2);
		}
		if(size == 3){
			_x=_y =4;
			s[0] = (132/2-60/2)+","+_y;
			s[1] = _x+","+(60+2*_y);
			s[2] = (60+2*_y)+","+(60+2*_y);
		}
		if(size ==4){
			_x=_y =4;
			s[0] = _x+","+_y;
			s[1] = (_x*2 + 60)+","+_y;
			s[2] = _x+","+(60+2*_y);
			s[3] = (60+2*_y)+","+(60+2*_y);
		}
		if(size == 5){
			_x = _y = 3;
			s[0] = (132-40*2-_x)/2+","+(132-40*2-_y)/2;
			s[1] = ((132-40*2-_x)/2+40+_x)+","+(132-40*2-_y)/2;
			s[2] = _x+","+((132-40*2-_x)/2+40+_y);
			s[3] = (_x*2+40)+","+((132-40*2-_x)/2+40+_y);
			s[4] = (_x*3+40*2)+","+((132-40*2-_x)/2+40+_y);
		}
		if(size == 6){
			_x = _y = 3;
			s[0] = _x+","+((132-40*2-_x)/2);
			s[1] = (_x*2+40)+","+((132-40*2-_x)/2);
			s[2] = (_x*3+40*2)+","+((132-40*2-_x)/2);
			s[3] = _x+","+((132-40*2-_x)/2+40+_y);
			s[4] = (_x*2+40)+","+((132-40*2-_x)/2+40+_y);
			s[5] = (_x*3+40*2)+","+((132-40*2-_x)/2+40+_y);
		}
		if(size == 7){
			_x=_y =3;
			s[0] = (132-40)/2+","+_y;
			s[1] = _x+","+(_y*2+40);
			s[2] = (_x*2+40)+","+(_y*2+40);
			s[3] = (_x*3+40*2)+","+(_y*2+40);
			s[4] = _x+","+(_y*3+40*2);
			s[5] = (_x*2+40)+","+(_y*3+40*2);
			s[6] = (_x*3+40*2)+","+(_y*3+40*2);
		}
		if(size == 8){
			_x=_y =3;
			s[0] = (132-80-_x)/2+","+_y;
			s[1] = ((132-80-_x)/2+_x+40)+","+_y;
			s[2] = _x+","+(_y*2+40);
			s[3] = (_x*2+40)+","+(_y*2+40);
			s[4] = (_x*3+40*2)+","+(_y*2+40);
			s[5] = _x+","+(_y*3+40*2);
			s[6] = (_x*2+40)+","+(_y*3+40*2);
			s[7] = (_x*3+40*2)+","+(_y*3+40*2); 
		}
		if(size == 9){
			_x=_y = 3;
			s[0]=_x+","+_y;
			s[1] = _x*2+40+","+_y;
			s[2] = _x*3+40*2 +","+_y;
			s[3] = _x+","+(_y*2+40);
			s[4] = (_x*2+40)+","+(_y*2+40);
			s[5] = (_x*3+40*2)+","+(_y*2+40);
			s[6] = _x+","+(_y*3+40*2);
			s[7] = (_x*2+40)+","+(_y*3+40*2);
			s[8] = (_x*3+40*2)+","+(_y*3+40*2); 
		}
		return s;
	}
	
	public static int getWidth(int size){
		int width = 0;
		if(size == 1){
			width = 120;
		}
		if(size>1 && size<=4){
			width = 60;
		}
		if(size>=5){
			width = 40;
		}
		return width;
	}
	
	public static void download(String urlString, String filename,String savePath) throws Exception {  
        // 构造URL  
        URL url = new URL(urlString);  
        // 打开连接  
        URLConnection con = url.openConnection();  
        //设置请求超时为5s  
        con.setConnectTimeout(5*1000);  
        // 输入流  
        InputStream is = con.getInputStream();  
      
        // 1K的数据缓冲  
        byte[] bs = new byte[1024];  
        // 读取到的数据长度  
        int len;  
        // 输出的文件流  
       File sf=new File(savePath);  
       if(!sf.exists()){  
           sf.mkdirs();  
       }  
       OutputStream os = new FileOutputStream(sf.getPath()+File.separator+filename);  
        // 开始读取  
        while ((len = is.read(bs)) != -1) {  
          os.write(bs, 0, len);  
        }  
        // 完毕,关闭所有链接  
        os.close();  
        is.close();  
    }   
	
	public static String zoom(String sourcePath,String targetPath,int width,int height) throws IOException{ 
        File imageFile = new File(sourcePath); 
        if(!imageFile.exists()){ 
            throw new IOException("Not found the images:"+sourcePath); 
        } 
        if(targetPath==null || targetPath.isEmpty()) targetPath = sourcePath; 
        String format = sourcePath.substring(sourcePath.lastIndexOf(".")+1,sourcePath.length()); 
        BufferedImage image = ImageIO.read(imageFile); 
        image = zoom(image,width,height); 
        ImageIO.write(image, format, new File(targetPath)); 
        return targetPath; 
    } 
	
	private static BufferedImage zoom(BufferedImage sourceImage , int width , int height){ 
        BufferedImage zoomImage = new BufferedImage(width, height, sourceImage.getType()); 
        Image image = sourceImage.getScaledInstance(width, height, Image.SCALE_SMOOTH); 
        Graphics gc = zoomImage.getGraphics(); 
        gc.setColor(Color.WHITE); 
        gc.drawImage( image , 0, 0, null); 
        return zoomImage; 
    }
	
	public static void createImage(File[] files,String outPath) throws Exception{
		String[] imageSize = getXy(files.length);
		int width = getWidth(files.length);
		BufferedImage ImageNew = new BufferedImage(132,132,BufferedImage.TYPE_INT_RGB);
//设置背景为白色
		for(int m=0;m<132;m++){
			for(int n=0;n<132;n++){
				ImageNew.setRGB(m, n, 0xFFFFFF);
			}
		}
		for(int i=0;i<imageSize.length;i++){
			String size = imageSize[i];
			String[] sizeArr = size.split(",");
			int x = Integer.valueOf(sizeArr[0]);
			int y = Integer.valueOf(sizeArr[1]);
			String f = zoom(files[i].getPath(),SystemConfig.getFileFsBase()+File.separator+"group"+File.separator+"temp",width,width);
			File fileOne = new File(f);
		       BufferedImage ImageOne = ImageIO.read(fileOne);

		       //从图片中读取RGB
		       int[] ImageArrayOne = new int[width*width];
		       ImageArrayOne = ImageOne.getRGB(0,0,width,width,ImageArrayOne,0,width);
			ImageNew.setRGB(x,y,width,width,ImageArrayOne,0,width);//设置左半部分的RGB
		}
		File outFile = new File(outPath);
	    ImageIO.write(ImageNew, "png", outFile);//写图片
	}
	
	public static void main(String[] args) throws Exception{

		File f = new File("D:\\group");
		File[] fArr = f.listFiles();
		createImage(fArr,"D:\\group\\g.png");
	}
1
0
分享到:
评论

相关推荐

    仿微信9宫格上传图片

    实现类似微信的9宫格 ,从相册选9张或直接拍照 ,获得后,对图片做bitmap的转换处理,处理完成后,逐一向服务器上传,成功后,保存服务器返回的路径

    Android仿微信支付宫格导航

    在Android开发中,"仿微信支付宫格导航"是一个常见的用户界面(UI)设计,它模仿了微信支付页面中的选项卡式导航布局。这个布局通常包含多个宫格,每个宫格代表一个功能或操作,点击后可以跳转到相应的页面。这种...

    Android-仿微信群头像九宫格控件

    本文将深入探讨如何创建一个名为“Android-仿微信群头像九宫格控件”的组件,该控件能够根据给定的用户头像列表,以九宫格的形式展示。 首先,我们要了解这个控件的基本原理。九宫格头像控件的核心是动态计算每个...

    Android 仿微信朋友圈9宫格图片展示&多选图片

    在Android开发中,微信朋友圈的9宫格图片展示与多选图片功能是常见的需求,尤其在社交类应用中。这个项目旨在教你如何在Android应用中实现类似的功能。下面将详细介绍这些知识点。 一、9宫格图片展示 1. **自定义...

    仿微信朋友圈9宫格图片选择器可删除.zip

    "仿微信朋友圈9宫格图片选择器"就是一个典型的例子,它模仿了微信在朋友圈发布时的图片选择体验,允许用户以9宫格的形式预览和选择图片,同时还提供了可删除功能,使得用户能够更加方便地调整自己的图片选择。...

    Android 仿微信朋友圈9宫格图片展示&amp;多选图片

    在Android开发中,微信朋友圈的9宫格图片展示和多选图片功能是常见的需求,尤其在社交类应用中。这个示例将详细讲解如何实现这一功能。 首先,我们需要理解9宫格布局的基本概念。9宫格是一种将屏幕分为9个等大小...

    仿微群聊合成1到9个人头像

    本话题主要关注如何使用Java或Android技术来实现“仿微群聊合成1到9个人头像”的功能。 首先,我们需要理解头像合成就是一门图像处理的艺术,它涉及到图片的裁剪、缩放、位置调整以及最终的合并。在这个过程中,...

    仿微信朋友圈图片九宫格布局

    "仿微信朋友圈图片九宫格布局"是一个常见的设计模式,它旨在优化图片展示,使得用户能快速浏览并理解信息。这种布局方式在移动应用中尤其常见,因为它有效地利用了有限的屏幕空间,同时保持了清晰的视觉层次。 首先...

    Android仿微信、支付宝钱包宫格界面Demo

    在Android应用开发中,创建一个类似微信或支付宝钱包的宫格界面是一项常见的需求,它可以用于展示各种功能图标或者卡片,使用户能够快速访问和操作。本篇内容将深入讲解如何实现这样一个宫格界面,主要围绕以下几个...

    微信群聊生成九宫格形式的头像

    对于“仿微信”的部分,意味着我们需要考虑微信特定的设计风格和交互效果,例如圆角头像、头像点击后的放大预览、滑动浏览等。这些可以通过以下方式实现: 1. 圆角头像:使用Shape Drawable或自定义View,设置边框...

    九宫格心形拼图小程序源码带流量主微信小程序源码.zip

    九宫格心形拼图小程序源码,带流量主微信小程序源码。可以自定义拼图形状,保存张数 自由填充图片、自由剪裁图片等。并带有流量主广告位,有需要的可以下载看看。

    LuBan图片压缩+ImageSelector实现仿微信9张图片选择或者无限图片批量选择压缩

    ImageSelector则是一个用于实现多种图片选择方式的库,它可以模仿微信的9宫格图片选择模式,也可以支持无限数量的图片批量选择。ImageSelector提供了丰富的界面样式和交互体验,允许用户在系统相册中选择图片,同时...

    Android平台仿微信朋友圈的9宫格图片展示与多选功能教程

    该资源提供了博文的源代码,对应的博文链接为http://blog.csdn.net/airsaid/article/details/51026447。。内容来源于网络分享,如有侵权请联系我删除。另外如果没有积分的同学需要下载,请私信我。

    android图片选择器,仿微信

    2. **9宫格展示**:在多图选择时,通常会采用9宫格的形式来展示预览图片,方便用户快速浏览和选择,这也是微信等应用的标准样式。 3. **图片裁剪**:除了选择图片,该组件还提供图片裁剪功能,用户可以自由调整裁剪...

    ios-仿探探六宫格相册.zip

    在iOS开发中,"ios-仿探探六宫格相册.zip"的项目是一个典型的图片展示应用的实现,尤其在社交应用中非常常见,如探探等。这种六宫格相册的设计通常用于用户个人资料页,展示用户的多张照片。下面我们将详细探讨这个...

    Android仿微信群聊头像效果

    在网上找了些仿微信群聊头像的开源库后,发现没特别好用的,或者说满足我需求的,就只好在别人的基础上改了下,也就有了这样的自定义控件了,以此来实现微信群聊头像的效果,效果图如下所示: 主要实现: 一、...

    WeiXinFriendCircle:一个模仿微信朋友圈上传图片后展示的九宫格效果

    9. **安全性**:项目可能考虑了安全问题,如防止文件上传攻击、XSS跨站脚本攻击以及CSRF跨站请求伪造等。 10. **部署与运行环境**:项目可能在Tomcat、Jetty等应用服务器上运行,并可能使用Docker进行容器化部署。 ...

    nine_grid_view:Flutter NineGridView和DragSortView。类似于微博微信的九个网格视图控件来显示图片。 Flutter仿微信微博九宫格,拖曳排序,微信类别,钉钉类别,QQ讨论组头像

    它还支持微信群组,DingTalk群组,QQ群组头像效果。 DragSortView 类似于微博/微信发布的动态图片选择九格视图。支持按放大效果,拖放排序,拖放到指定位置删除。 酒馆 dependencies : nine_grid_view : ^2.0.0 ...

    Starling9宫格类库

    Starling9宫格类库是针对Adobe Starling框架的一个扩展,专门用于实现图像的9宫格缩放功能。在游戏开发或UI设计中,9宫格缩放是一种常见的技术,它允许图片在保持角部不变形的情况下进行拉伸,从而在不同尺寸的屏幕...

Global site tag (gtag.js) - Google Analytics