Java,在Java中调整文件大小后图像变黑
在Java中调整多部分文件的大小后,图像变为黑色 我正在尝试将文件保存在sql db中。。由于内存原因,我需要降低图像质量和大小。调整大小后,图像变黑 有什么想法吗Java,在Java中调整文件大小后图像变黑,java,resize,bufferedimage,Java,Resize,Bufferedimage,在Java中调整多部分文件的大小后,图像变为黑色 我正在尝试将文件保存在sql db中。。由于内存原因,我需要降低图像质量和大小。调整大小后,图像变黑 有什么想法吗 private static int IMG_HEIGHT = 1280; private static int IMG_WIDTH= 860; private static int imgType = Image.SCALE_SMOOTH; try { byteArr = doc.getBytes();
private static int IMG_HEIGHT = 1280;
private static int IMG_WIDTH= 860;
private static int imgType = Image.SCALE_SMOOTH;
try {
byteArr = doc.getBytes();
ImageIcon imgIcon = new ImageIcon(byteArr);
int height = imgIcon.getIconHeight();
int width = imgIcon.getIconWidth();
if(height > IMG_HEIGHT || width > IMG_WIDTH){
int newWidth = width;
int newHeight = height;
if(height > IMG_HEIGHT){
newHeight = IMG_HEIGHT;
}
if(width > IMG_WIDTH){
newWidth = IMG_WIDTH;
}
System.out.println("Img newHeight = "+newHeight);
System.out.println("Img newWidth = "+newWidth);
Image newImage = imgIcon.getImage();
newImage = newImage.getScaledInstance(newWidth, newHeight, imgType);
BufferedImage buffImage = new BufferedImage(newWidth, newHeight, BufferedImage.TYPE_INT_RGB);
Graphics2D g2 = buffImage.createGraphics();
g2.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
g2.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
g2.drawImage(newImage, 0, 0, width, height, null);
// g2.setColor(Color.WHITE);
// g2.fillRect(0, 0, newWidth, newHeight);
// g2.setComposite(AlphaComposite.SrcOver);
// AffineTransform scaleTransform = AffineTransform.getScaleInstance(width / (double) newImage.getWidth(null), height / (double) newImage.getHeight(null));
// g2.drawImage(newImage, scaleTransform, null);
g2.dispose();
baos = new ByteArrayOutputStream();
ImageIO.write(buffImage,"jpg", baos);
我对透明背景的图像也有类似的问题。 只需将
graphics.drawImage
中的Color.WHITE
作为背景色,就可以避免黑色背景
Graphics2D graphics = buffImage.createGraphics();
graphics.drawImage(newImage, 0, 0, IMAGE_WIDTH, IMAGE_HEIGHT, Color.WHITE, null);
graphics.setComposite(AlphaComposite.getInstance(AlphaComposite.DST_IN, 1.0f));
我使用了Scalr库,它只用一行就解决了我的问题:)
bImageFromConvert是BuffereImage…感谢您的回复,但它不会改变任何事情:(嗨,四年前,您找到了解决这个问题的方法吗?
BufferedImage thumbS = Scalr.resize(bImageFromConvert, Scalr.Method.BALANCED, IMG_HEIGHT, IMG_WIDTH, Scalr.OP_ANTIALIAS);