gpt4 book ai didi

java - 如何从 Java 中的 URL 获取图像格式?

转载 作者:行者123 更新时间:2023-12-01 07:23:34 27 4
gpt4 key购买 nike

我有一个从没有扩展名的网址获取的图像(jpg、gif、png 等)。

我下载图像没有问题。

BufferedImage image = null;
URL url = new URL(link);
image = ImageIO.read(url);

但是,我想在保存到磁盘之前知道文件的扩展名。我尝试了以下操作,ImageIO.createImageInputStream(image); 始终返回 null。

ImageInputStream iis = ImageIO.createImageInputStream(image);
//where image is BufferImage but it is always returning null.

while (imageReaders.hasNext()) {
ImageReader reader = imageReaders.next();
System.out.printf("formatName: %s%n", reader.getFormatName());

return ImageFormatTypes.valueOf(reader.getFormatName());
}

如有任何建议,我们将不胜感激。

最佳答案

一旦创建了 java.awt.Image,就没有格式了。它不是 PNG,也不是 JPEG,它只是一个 Java 图像。因此您无法从 Image 对象获取图像格式。

您需要从 URL 中获取它。最可靠的方法是检查 URL 的内容类型,然后从 ImageIO 提供程序获取扩展名:

URL url = new URL(link);
URLConnection conn = url.openConnection();
String contentType = conn.getContentType();

String suffix = null;
Iterator<ImageReader> readers =
ImageIO.getImageReadersByMIMEType(contentType);
while (suffix == null && readers.hasNext()) {
ImageReaderSpi provider = readers.next().getOriginatingProvider();
if (provider != null) {
String[] suffixes = provider.getFileSuffixes();
if (suffixes != null) {
suffix = suffixes[0];
}
}
}

您还可以将 URL 保存到临时文件,以便可以在其上使用 Files.probeContentType:

URL url = new URL(link);
Path imageFile = Files.createTempFile("image", null);
try (InputStream stream = url.openStream()) {
Files.copy(stream, imageFile, StandardCopyOption.REPLACE_EXISTING);
}

image = ImageIO.read(imageFile.toFile());
String contentType = Files.probeContentType(imageFile);
Files.delete(imageFile);

但是您仍然需要 ImageIO 提供程序来从 MIME 类型获取扩展。

关于java - 如何从 Java 中的 URL 获取图像格式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29993278/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com