Java에서 축소 후 이미지 품질 개선
아시다시피 이미지를 상당히 작게 조정하면 이미지가 눈에 띄게 줄어들 수 있습니다. 이미지 품질 손실. 이 문제를 해결하려면 다음 구현을 고려하세요.
분할 및 정복 접근 방식:
이미지를 한 번에 축소하는 대신 점진적인 단계로 나누세요. 이렇게 하면 전체적인 배율이 줄어들어 품질이 향상됩니다.
향상된 렌더링:
resizeImage() 메서드에서 개선을 위해 적절한 렌더링 힌트를 설정했는지 확인하세요. 보간 알고리즘 및 이미지 품질. 다음과 같은 상수 사용을 고려해보세요.
RenderingHints.VALUE_INTERPOLATION_BILINEAR RenderingHints.VALUE_RENDER_QUALITY RenderingHints.VALUE_ANTIALIAS_ON
리샘플링:
확장 시 더 높은 품질의 결과를 생성하는 것으로 알려진 bicubic 또는 Lanczos와 같은 다양한 리샘플링 알고리즘을 실험해 보세요. 이미지를 위아래로.
샘플 코드:
다음은 제안된 개선 사항을 통합한 수정된 코드 버전입니다.
public static Boolean resizeImage(String sourceImg, String destImg, Integer Width, Integer Height, Integer whiteSpaceAmount) { BufferedImage origImage; try { origImage = ImageIO.read(new File(sourceImg)); int type = origImage.getType() == 0? BufferedImage.TYPE_INT_ARGB : origImage.getType(); int fHeight = Height; int fWidth = Width; int whiteSpace = Height + whiteSpaceAmount; double aspectRatio; // Determine resized dimensions if (origImage.getHeight() > origImage.getWidth()) { fHeight = Height; aspectRatio = (double)origImage.getWidth() / (double)origImage.getHeight(); fWidth = (int)Math.round(Width * aspectRatio); } else { fWidth = Width; aspectRatio = (double)origImage.getHeight() / (double)origImage.getWidth(); fHeight = (int)Math.round(Height * aspectRatio); } BufferedImage scaledImage = new BufferedImage(whiteSpace, whiteSpace, type); Graphics2D g = scaledImage.createGraphics(); g.setColor(Color.white); g.fillRect(0, 0, whiteSpace, whiteSpace); g.setComposite(AlphaComposite.Src); g.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR); g.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY); g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); // Instead of scaling directly to fHeight/fWidth, do it in steps int step = 2; while (fHeight > 0 && fWidth > 0) { g.drawImage(origImage, (whiteSpace - fWidth)/2, (whiteSpace - fHeight)/2, fWidth, fHeight, null); origImage = scaledImage; fWidth /= step; fHeight /= step; } g.dispose(); ImageIO.write(scaledImage, "jpg", new File(destImg)); } catch (IOException ex) { return false; } return true; }
이러한 개선 사항을 구현하면 특히 이미지 크기를 줄일 때 향상된 이미지 품질을 볼 수 있습니다. 더 큰 규모의 요소.
위 내용은 Java에서 크기를 축소한 후 이미지 품질을 어떻게 향상시킬 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!