Ho creato questo codice per ridimensionare le immagini con due fattori. Funziona, ma la qualità dell'immagine è pessima dopo che è stata ridimensionata! Mi potete aiutare?Ridimensionamento di un'immagine senza perdita di qualità
Questo è il codice
public class ImageTest {
private static final int factor1 = 3;
private static final int factor2 = 4;
public static void main(String [] args){
JFileChooser cs = new JFileChooser();
cs.setFileSelectionMode(cs.DIRECTORIES_ONLY);
int i = cs.showOpenDialog(null);
if(i==cs.APPROVE_OPTION){
File f = cs.getSelectedFile();
File[] ff = f.listFiles();
for(int j=0;j<ff.length;j++){
String end = ff[j].getName().substring(ff[j].getName().indexOf(".")+1);
System.out.println(end);
try{
BufferedImage originalImage = ImageIO.read(ff[j]);
int type = originalImage.getType() == 0? BufferedImage.TYPE_INT_ARGB : originalImage.getType();
BufferedImage resizeImageJpg = resizeImageWithHint(originalImage, type);
ImageIO.write(resizeImageJpg, end, new File("pr/"+ff[j].getName()));
}catch(IOException e){
e.printStackTrace();
}
}
}
}
private static BufferedImage resizeImageWithHint(BufferedImage originalImage, int type){
int IMG_WIDTH = (originalImage.getWidth()*factor1)/factor2;
int IMG_HEIGHT = (originalImage.getHeight()*factor1)/factor2;
BufferedImage resizedImage = new BufferedImage(IMG_WIDTH, IMG_HEIGHT, type);
Graphics2D g = resizedImage.createGraphics();
g.drawImage(originalImage, 0, 0, IMG_WIDTH, IMG_HEIGHT, null);
g.dispose();
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);
return resizedImage;
}
}
ho visto sul web che resizeImageWithHint è fatto nell'ambito di applicazione in modo da non perdere la qualità .. ma lo fa! perché? Puoi aiutarmi con questo?
sì, quell'articolo è buono, sia imgscalr che java-image-scaling lo citano, ma anche in questo caso il risultato è diverso, penso che i filtri che il ridimensionamento di immagini java può applicare fanno la differenza. – stivlo
le mie immagini sono png ... puoi postare il mio codice di multistep? pls? – JackTurky
Un buon articolo, ha davvero aiutato a migliorare la qualità delle immagini ridimensionate. Cambiare 'w/= 2' a 'w/= 1.2' mi dà una qualità migliore (verranno eseguiti più loop, quindi la qualità è migliore) –