java 通过图片地址 转换图片信息 小于4mb 分辨率不高于4096x4096 如果不符合转化为符合条件的图片地址
时间: 2023-10-03 19:11:10 浏览: 165
Java中可以使用ImageIO类和BufferedImage类来读取和保存图片信息。以下是一个简单的示例代码,可以从指定的图片地址读取图片信息,并检查图片大小和分辨率是否符合要求,如果不符合要求则对图片进行压缩,并保存为一个新的符合条件的图片:
```java
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.net.URL;
import javax.imageio.ImageIO;
public class ImageInfo {
public static void main(String[] args) {
String imageUrl = "https://example.com/image.jpg";
try {
// 从指定URL读取图片信息
BufferedImage image = ImageIO.read(new URL(imageUrl));
// 检查图片大小是否小于4MB
long imageSize = getImageSize(imageUrl);
if (imageSize > 4 * 1024 * 1024) {
// 对图片进行压缩,保证图片大小不超过4MB
image = compressImage(image, 4 * 1024 * 1024);
}
// 检查图片分辨率是否小于4096x4096
int width = image.getWidth();
int height = image.getHeight();
if (width > 4096 || height > 4096) {
// 对图片进行压缩,保证图片分辨率不超过4096x4096
image = compressImage(image, 4096, 4096);
}
// 保存符合条件的图片
String newImageUrl = saveImage(image);
// 输出新的图片地址
System.out.println("New image url: " + newImageUrl);
} catch (IOException e) {
e.printStackTrace();
}
}
// 获取指定URL的图片大小
public static long getImageSize(String imageUrl) throws IOException {
URL url = new URL(imageUrl);
return url.openConnection().getContentLengthLong();
}
// 对图片进行压缩,保证图片大小不超过指定大小
public static BufferedImage compressImage(BufferedImage image, long maxSize) throws IOException {
double scale = Math.sqrt((double) image.getWidth() * image.getHeight() / maxSize);
int width = (int) (image.getWidth() / scale);
int height = (int) (image.getHeight() / scale);
return compressImage(image, width, height);
}
// 对图片进行压缩,保证图片分辨率不超过指定大小
public static BufferedImage compressImage(BufferedImage image, int maxWidth, int maxHeight) throws IOException {
int width = image.getWidth();
int height = image.getHeight();
if (width > maxWidth || height > maxHeight) {
double scale = Math.min((double) maxWidth / width, (double) maxHeight / height);
width = (int) (width * scale);
height = (int) (height * scale);
BufferedImage newImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
newImage.getGraphics().drawImage(image.getScaledInstance(width, height, java.awt.Image.SCALE_SMOOTH), 0, 0, null);
return newImage;
} else {
return image;
}
}
// 将图片保存到本地,并返回保存后的图片地址
public static String saveImage(BufferedImage image) throws IOException {
File file = new File("new_image.jpg");
ImageIO.write(image, "jpg", file);
return file.getAbsolutePath();
}
}
```
需要注意的是,为了避免因为网络原因导致的读取图片失败,最好在读取图片时加上一些异常处理的代码。同时,为了保证代码的可读性和可维护性,最好将压缩图片和保存图片的代码封装成一个方法。最后,需要将新的图片地址返回给调用方,以便进行后续操作。
阅读全文