Visualizzazione dei risultati da 1 a 5 su 5

Discussione: Resize immagini

  1. #1

    Resize immagini

    ciao!

    avrei una domanda sul resize delle immagini.
    e anche guardando in giro non sono bene riuscito a capire come fare quello che mi servirebbe fare.
    allora, tra casi possibili:
    -imposto larghezza e altezza
    -imposto solo l'altezza e la larghezza viene calcolata in automatico
    -imposto solo la larghezza e l'altezza viene calcolata in automatico

    i due secondi casi sono i "problematici".
    ho provato anche questa libreria direttamente, che sembrava essere molto consigliata: https://code.google.com/p/thumbnaila...mples#Examples

    sapete darmi una dritta?
    anche un'altra libreria, per ma va bene.

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da fermat Visualizza il messaggio
    avrei una domanda sul resize delle immagini.
    -imposto larghezza e altezza
    -imposto solo l'altezza e la larghezza viene calcolata in automatico
    -imposto solo la larghezza e l'altezza viene calcolata in automatico
    Nel framework di Java SE c'è principalmente il getScaledInstance di java.awt.Image.

    E da quanto rileggo ora ha una logica del tipo: If either width or height is a negative number then a value is substituted to maintain the aspect ratio of the original image dimensions.

    Quindi può fare i casi che chiedi.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Nel framework di Java SE c'è principalmente il getScaledInstance di java.awt.Image.

    E da quanto rileggo ora ha una logica del tipo: If either width or height is a negative number then a value is substituted to maintain the aspect ratio of the original image dimensions.

    Quindi può fare i casi che chiedi.
    ciao andbin.

    allora, ho provato a guardare quanto mi hai suggerito.
    ma ho un problemino:
    codice:
     public void resizeImage(File inputImage, String dir, int width, int height) throws IOException {
            String ext = FilenameUtils.getExtension(inputImage.getName());
            ImageIcon ii = new ImageIcon(inputImage.getPath());
            Image image = ii.getImage();
            Image newImage = image.getScaledInstance(width, height, Image.SCALE_SMOOTH);
            BufferedImage buf = new BufferedImage(newImage.getWidth(null), newImage.getHeight(null), BufferedImage.TYPE_INT_RGB);
            Graphics2D g2 = buf.createGraphics();
            g2.drawImage(newImage, 0, 0, null);
            g2.dispose();
            ImageIO.write(buf, ext, new File(dir + inputImage.getName() + "." + ext));
        }
    ho passato -1 come width.
    ho una eccezione sul BufferedImage:
    codice:
    Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: Width (-1) and height (-1) cannot be <= 0
    mi pare di capire che non accetta parametri negativi.
    però a questo punto non riesco bene a capire però.
    cercando in giro, ho trovato solo documentazio ed esempi usando BufferedImage per salvare la Image.

  4. #4
    ok risolto così:
    codice:
        public void resizeImage(File inputImage, String dir, int width, int height) throws IOException {
            Image image = ImageIO.read(inputImage);
            Image newImage = image.getScaledInstance(width, height, Image.SCALE_SMOOTH);
            BufferedImage buf = new BufferedImage(newImage.getWidth(null), newImage.getHeight(null), BufferedImage.TYPE_INT_RGB);
            Graphics2D g2 = buf.createGraphics();
            g2.drawImage(newImage, 0, 0, null);
            g2.dispose();
            String ext = FilenameUtils.getExtension(inputImage.getName());
            ImageIO.write(buf, ext, new File(dir + inputImage.getName()));
        }
    grazie per la dritta!

  5. #5
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da fermat Visualizza il messaggio
    ok risolto così:
    Sì, così va bene.
    Prima non funzionava perché la immagine originale era caricata in modo asincrono dal Toolkit di AWT (ImageIcon aggiunge di suo solo il tracking per attendere il completamento del caricamento). E la immagine scalata era di nuovo una immagine caricabile in modo asincrono, percui subito immediatamente dopo il getScaledInstance, il newImage.getWidth(null) ti restituisce -1 (idem per height) perché la dimensione non è ancora nota. E questo era il problema per la creazione del BufferedImage.

    Se la immagine originale la carichi con la ImageIO, hai un BufferedImage già completa e la immagine scalata è presumibilmente di nuovo un BufferedImage, quindi completa (non ho mai verificato questo aspetto ma credo sia così).
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.