java - 将 Gravatar 图像保存到数据库

标签 java image gravatar

我想使用Gravatar但我不想publish users MD5 hashes他们的电子邮件地址。还有more potential problems 。所以我决定下载它们并将它们存储在我的数据库中。
但我对这样一个简单的任务有一个问题,因为我的个人资料图片(Earlybird)下载后看起来很糟糕:

enter image description here

这是我使用的代码。

try (ByteArrayOutputStream baos = new ByteArrayOutputStream()) {
    final URL url = new URL("http://www.gravatar.com/avatar/" + account.getGravatarHash() + "?d=identicon");
    final BufferedImage image = ImageIO.read(url);
    ImageIO.write(image, "jpg", baos);
    pic = baos.toByteArray();
} catch (IOException e) {
    e.printStackTrace();
}

pic 中的值将直接存储到数据库中。我数据库中的其他图片存储良好,因此问题一定出在这些行中。

编辑:
我只是通过将 "jpg" 更改为 "png" 来部分解决问题,甚至认为 Gravatar tutorial提到了“jpg”。另外,我不想指定图像格式(除非所有 Gravatars 都是 png)。我可以避免这种情况吗?我只想保存我得到的字节。

最佳答案

大多数情况下,浏览器都使用原始字节。但是,非常感谢为每个图像发送“Content-Type:image/...” header 。

当您在数据库中保存字节时,您还必须

  1. 保存 Gravatar 为此图像提供的图像内容类型,或者
  2. 将图像转换为默认格式,以便您可以对数据库中的所有图像进行硬编码内容类型

要获取 Gravatar 提供的标题,您可以使用 Apache HTTP Client .

要将图像转换为您喜欢的格式,您可以使用 ImageIO。

关于java - 将 Gravatar 图像保存到数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33091127/

相关文章:

php - 我如何在 Laravel 中实现 Gravatar?

java - 按频率排序字符串数组的最有效方法

java - 如何在任何线程上从对话框中获取值?

java - 如何在从 Servlet 转发时将 JSP 片段包含到 JSP 页面中?

image - Flutter - 将 Image.Network 与 cookie 一起使用

php - Gravatar 不再通过 https 工作

ajax - Gravatar VS JQuery Ajax...有帮助吗?

java - 我无法更新本体模型

c# - Picture Box 图片来源是否可能?

html - 对外部 svg 使用 preserveAspectRatio