나는 다음과 같은 코드를 가지고 :BufferedImage의 크기를 조정하고는 JPG의 이미지를 검정색 배경에서 결과를 파일로 저장
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.File;
import javax.imageio.ImageIO;
public class JavaApplication
{
public static void main(String[] args) throws Exception
{
File orig = new File ("/home/xxx/Pictures/xxx.jpg");
BufferedImage bm1 = ImageIO.read(orig);
Image scaled = bm1.getScaledInstance(100, 200, BufferedImage.SCALE_SMOOTH);
BufferedImage bm2 = toBufferedImage(scaled);
File resized = new File ("/home/xxx/Pictures/resized.jpg");
ImageIO.write(bm2, "jpg", resized);
}
public static BufferedImage toBufferedImage(Image img)
{
if (img instanceof BufferedImage)
{
return (BufferedImage) img;
}
BufferedImage bimage = new BufferedImage(img.getWidth(null), img.getHeight(null), BufferedImage.TYPE_INT_ARGB);
bimage.getGraphics().drawImage(img, 0, 0 , null);
return bimage;
}
}
나는 .PNG 파일에이 코드를 사용하는 경우, 그것은 잘 작동하고 파일 크기를 조정 예상했다. 그러나 jpg 파일에서 검은 색 배경이됩니다.
getScaledInstance()
코드를 제거하고 ImageIO.write(bm1, "jpg", resized)
을 사용하여 원래 bm1
을 디스크에 다시 쓰려고하면 정상적으로 작동합니다. getScaledInstance()
을 사용하여 크기를 조정하고 그 결과로 Image
을 BufferedImage
으로 변환하려고 할 때만 완전히 검정색 배경 파일이 생성됩니까?
이 문제를 해결하는 방법이나 내가 잘못하고있는 것에 대한 아이디어가 있습니까?
이미지 스케일링을 한 지 오래되었지만이 기사는 유용합니다. https : //today.ja va.net/pub/a/today/2007/04/03/perils-of-image-getscaledinstance.html. 어쩌면 거기에있는 기술 중 일부가 도움이 될까요? – Ash
@Ash 너는 나에게 tl을 줄 수 있니,이 박사? 어쨌든'Image.getScaledInstance()'를 사용하지 않고 BufferedImage.getScaledInstance()를 사용하고 있습니다. –
문제는 당신이'getScaledInstance()'를 사용하고 있다는 것입니다. 'Image', *로 즉시 반환하지만이 시점에서 이미지의 크기가 아직 조정되지 않았습니다 *. 그래서 나중에이 이미지를 사용하여'drawImage'를 호출하면 사실상 아무 작업도 수행하지 않습니다. 업데이트 :'Image' 나'BufferedImage'에서'getScaledInstance'를 사용하면 아무런 차이가 없습니다. – haraldK