Java 如何根据头像地址生成圆形的头像?

2018-12-28 15:49:43 +08:00
 samples

目前我使用的是 Graphics2d 做的。但是怎么生成都有难看的锯齿? github 上也没找到相应的库,可能是我搜索的关键词不对。求大佬指点下

3156 次点击
所在节点    程序员
12 条回复
guolaopi
2018-12-28 16:00:07 +08:00
菜鸡给个思路。图片上画个圆,然后把圆里面的像素内容啥的拷到一个新的图片里保存
NEETLEE
2018-12-28 16:53:02 +08:00
如果你要将图片展示在类 web 项目可以用另一种思路:css 将 img 标签弄成圆的,图片只转换成固定的大小
sunjiayao
2018-12-28 16:54:42 +08:00
像素设高点试试
zmlu
2018-12-28 16:56:03 +08:00
OpenCV
redtea
2018-12-28 17:04:22 +08:00
放到阿里云 OSS
swordne
2018-12-28 17:16:51 +08:00
如果是 web 项目,交给前端去做就好了,一个 border-radius 的事。
如果不是的话,有点烦。
DsuineGP
2018-12-28 17:25:18 +08:00
之前有个差不多的需求..Graphics2d 生成的图片感觉都是带锯齿的..跟产品说没办法,只能这么着了
yrom
2018-12-28 17:36:41 +08:00
samples
2018-12-28 17:51:20 +08:00
@guolaopi 这个确实管用
@zmlu 这个看了下,不知道咋用,学习下了
@swordne 对是的,可是需求就是后台生成。
jzmws
2018-12-28 17:51:37 +08:00
Graphics2D 可以做到抗锯齿
yzpure
2018-12-28 19:03:57 +08:00
随便写了下,ARGB 带透明效果,输出 png 图片也会比 jpg 大不少,实时生成图片比较耗时的,访问量大的话要注意
----------------------代码分割线-------------------------
public static void main(String[] args) throws IOException {
String str = "这里是图片链接";
URL url = new URL(str);
BufferedImage srcImage = ImageIO.read(url);
int width = srcImage.getWidth();
int height = srcImage.getHeight();

BufferedImage dstImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
Graphics2D g2 = dstImage.createGraphics();

TexturePaint texturePaint = new TexturePaint(srcImage, new Rectangle2D.Float(0, 0, width, height));
g2.setPaint(texturePaint);

Ellipse2D.Float ellipse = new Ellipse2D.Float(0, 0, width, height);
// 抗锯齿
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g2.fill(ellipse);

g2.dispose();

// write to file
ImageIO.write(dstImage, "png", new File("portrait.png"));
// to bytes or inputStream 略
}
samples
2018-12-28 19:51:38 +08:00
@yzpure 谢谢。可以满足使用了。就如你所说新的问题来了。性能!幸好是按需求来说可以提前生成,分享时直接取出图片的 url。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/521922

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX