T
theomega
Gast
Hallo Leute,
ich habe in Java mit IOImage eine Funktion geschrieben um Thumbnails von Bilder zu erstellen. Leider ist mir aufgefallen das trotz bessten Qualitäts-Einstellungen die Thumbnails nur sehr bescheiden aussehen:
Ausgangsbild:
Thumbnail:
Wenn ich dagegen vom gleichen Bild mit einer Software wie IrfanView ein THumbnail erstelle, dann ist die Qualität wesentlich besser, es kann also nicht am Ausgangsmaterial liegen:
der Code ist dieser hier:
Wer kann mir sagen woran das liegt? Da muss doch mehr drin sein, oder nicht?
Danke
TO
ich habe in Java mit IOImage eine Funktion geschrieben um Thumbnails von Bilder zu erstellen. Leider ist mir aufgefallen das trotz bessten Qualitäts-Einstellungen die Thumbnails nur sehr bescheiden aussehen:
Ausgangsbild:
Thumbnail:
Wenn ich dagegen vom gleichen Bild mit einer Software wie IrfanView ein THumbnail erstelle, dann ist die Qualität wesentlich besser, es kann also nicht am Ausgangsmaterial liegen:
der Code ist dieser hier:
Code:
public static boolean createThumbnail(BufferedImage image, String format, File file, int dim) {
try {
int tw;
int th;
if (image.getHeight()>image.getWidth()) {
th = dim;
tw = (int)Math.round((double)image.getWidth()/(double)image.getHeight()*(double)dim);
}
else {
th = (int)Math.round((double)image.getHeight()/(double)image.getWidth()*(double)dim);
tw = dim;
}
BufferedImage thumb = new BufferedImage(tw,th, BufferedImage.TYPE_INT_RGB);
Graphics2D g2d = thumb.createGraphics();
g2d.setRenderingHint(RenderingHints.KEY_COLOR_RENDERING ,RenderingHints.VALUE_COLOR_RENDER_QUALITY);
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING ,RenderingHints.VALUE_ANTIALIAS_ON ); g2d.setRenderingHint(RenderingHints.KEY_INTERPOLATION,RenderingHints.VALUE_INTERPOLATION_BILINEAR);
g2d.setRenderingHint(RenderingHints.KEY_RENDERING,RenderingHints.VALUE_RENDER_QUALITY);
g2d.setRenderingHint(RenderingHints.KEY_ALPHA_INTERPOLATION,RenderingHints.VALUE_ALPHA_INTERPOLATION_QUALITY);
g2d.drawImage(image,0,0,tw,th,null);
OutputStream tfos = new FileOutputStream(file);
ImageIO.write(thumb,format,tfos);
tfos.flush();
tfos.close();
if (file.exists() && file.length()>0) {
return(true);
}
else {
return(false);
}
}
catch (Exception e){
LOGGER.exception(e);
return(false);
}
}
Wer kann mir sagen woran das liegt? Da muss doch mehr drin sein, oder nicht?
Danke
TO