java image 类型图片等比例缩小宽高代码
时间: 2023-03-16 15:44:07 浏览: 108
答:可以使用java的Graphics2D类来缩放图片,代码示例如下: //load image
BufferedImage originalImage = ImageIO.read(new File("d:\\image\\mypic.jpg")); //get width and height
int width = originalImage.getWidth();
int height = originalImage.getHeight(); //scale width and height
width = width * scale;
height = height * scale; //create new image object
BufferedImage resizedImage = new BufferedImage(width, height, originalImage.getType()); //create graphic object
Graphics2D g = resizedImage.createGraphics(); //draw resized image
g.drawImage(originalImage, 0, 0, width, height, null);
g.dispose();
相关问题
java 按宽度等比例压缩图片
可以使用 Java 中的 ImageIO 和 BufferedImage 类来实现按宽度等比例压缩图片的功能。具体实现步骤如下:
1. 使用 ImageIO 类的 read 方法读取原始图片文件,并将其保存为 BufferedImage 对象。
2. 获取原始图片的宽度和高度。
3. 计算等比例缩小后的宽度和高度,其中宽度为指定的压缩宽度,高度按比例计算。
4. 创建一个新的 BufferedImage 对象,设置其宽度和高度为计算出来的缩小后的宽度和高度。
5. 使用 Graphics2D 类的 drawImage 方法将原始图片绘制到新的 BufferedImage 对象上,并按比例缩小。
6. 使用 ImageIO 类的 write 方法将新的 BufferedImage 对象保存为压缩后的图片文件。
下面是一个简单的 Java 代码示例:
```java
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.File;
import javax.imageio.ImageIO;
public class ImageCompressor {
public static void compressImage(String srcFilePath, String destFilePath, int width) throws Exception {
// 读取原始图片文件
BufferedImage srcImage = ImageIO.read(new File(srcFilePath));
// 获取原始图片的宽度和高度
int srcWidth = srcImage.getWidth();
int srcHeight = srcImage.getHeight();
// 计算等比例缩小后的宽度和高度
int destWidth = width;
int destHeight = (int) (srcHeight * ((double) destWidth / srcWidth));
// 创建一个新的 BufferedImage 对象
BufferedImage destImage = new BufferedImage(destWidth, destHeight, BufferedImage.TYPE_INT_RGB);
// 绘制原始图片到新的 BufferedImage 对象上,并按比例缩小
Graphics2D g = destImage.createGraphics();
g.drawImage(srcImage, 0, 0, destWidth, destHeight, null);
g.dispose();
// 保存压缩后的图片文件
ImageIO.write(destImage, "jpg", new File(destFilePath));
}
public static void main(String[] args) throws Exception {
compressImage("original.jpg", "compressed.jpg", 800);
}
}
```
上面的代码将原始图片文件 "original.jpg" 压缩成宽度为 800 像素的图片,并保存为 "compressed.jpg" 文件。
java 按宽度等比例压缩图片 返回图片流
如果你想要将按宽度等比例压缩后的图片以流的形式返回,可以稍微修改一下上面的代码。具体实现步骤如下:
1. 创建一个 ByteArrayOutputStream 对象,用于存储压缩后的图片数据。
2. 使用 ImageIO 类的 write 方法将新的 BufferedImage 对象输出到 ByteArrayOutputStream 对象中。
3. 使用 ByteArrayOutputStream 对象的 toByteArray 方法将压缩后的图片数据转换成字节数组。
4. 返回字节数组即可。
下面是修改后的 Java 代码示例:
```java
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.File;
import javax.imageio.ImageIO;
public class ImageCompressor {
public static byte[] compressImage(String srcFilePath, int width) throws Exception {
// 读取原始图片文件
BufferedImage srcImage = ImageIO.read(new File(srcFilePath));
// 获取原始图片的宽度和高度
int srcWidth = srcImage.getWidth();
int srcHeight = srcImage.getHeight();
// 计算等比例缩小后的宽度和高度
int destWidth = width;
int destHeight = (int) (srcHeight * ((double) destWidth / srcWidth));
// 创建一个新的 BufferedImage 对象
BufferedImage destImage = new BufferedImage(destWidth, destHeight, BufferedImage.TYPE_INT_RGB);
// 绘制原始图片到新的 BufferedImage 对象上,并按比例缩小
Graphics2D g = destImage.createGraphics();
g.drawImage(srcImage, 0, 0, destWidth, destHeight, null);
g.dispose();
// 将新的 BufferedImage 对象输出到 ByteArrayOutputStream 对象中
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageIO.write(destImage, "jpg", baos);
// 返回压缩后的图片数据
return baos.toByteArray();
}
public static void main(String[] args) throws Exception {
byte[] compressedImageData = compressImage("original.jpg", 800);
// do something with the compressedImageData
}
}
```
上面的代码将原始图片文件 "original.jpg" 压缩成宽度为 800 像素的图片,将压缩后的图片数据存储在字节数组 compressedImageData 中,并返回该字节数组。你可以根据实际需求对返回的字节数组进行处理。