JavaFX Bildgröße verkleinern

micfire

Mitglied
Hallo liebe Community.

Nach mittlerweile ein paar Stunden bei Google, diversen Foren und auch hier bitte ich ganz kurz um eure Hilfe.

Durch folgenden Code lade ich eine Bilddatei in ein ImageView:

Java:
    public void fileChooser() throws IOException, SQLException{
        FileChooser fileChooser = new FileChooser();
        fileChooser.setTitle("Durchsuchen...");
        FileChooser.ExtensionFilter JPG= new FileChooser.ExtensionFilter("JPEG (*.jpg)", "*.JPG");
        FileChooser.ExtensionFilter PNG= new FileChooser.ExtensionFilter("PNG (*.png)", "*.PNG");
        fileChooser.getExtensionFilters().addAll(JPG,PNG);
       
        fileFlugzeug = fileChooser.showOpenDialog(Main.primaryStage);
        if(fileFlugzeug != null){
            Image image = new Image(fileFlugzeug.toURI().toURL().toExternalForm());           
            ImageViewBild.setImage(image);   
        }
    }

Ich suche nach einer Möglichkeit, dieses Bild beim laden auf eine Größe von 200px, 100px zu skallieren. Diese Größe sollte dann fest sein, d.h. kein Zoom usw..
Absicht ist es, dass Bild danach in dieser Größe zu Speichern, dabei die Dateigröße zu reduzieren und schließlich das spätere Laden zu verschnellern.

Vielen Dank im Voraus...
 

dzim

Top Contributor
Das steht als Beispiel in der JavaDoc des ImageView:
https://docs.oracle.com/javase/8/javafx/api/javafx/scene/image/ImageView.html

Java:
         // resizes the image to have width of 100 while preserving the ratio and using
         // higher quality filtering method; this ImageView is also cached to
         // improve performance
         ImageView iv2 = new ImageView();
         iv2.setImage(image);
         iv2.setFitWidth(100);
         iv2.setPreserveRatio(true);
         iv2.setSmooth(true);
         iv2.setCache(true);
 

micfire

Mitglied
Ja das hab ich auch schon gefunden. Das Bild speichere ich als File in eine Datenbank. Das funktioniert soweit ganz gut. Aber da das File ansich ja nicht in der Größe verändert wird, sondern lediglich das ImageView hab ich beim speicher/laden wieder das größere Bild, welches dann wiederum verkleinert wird.

Methode zum speichern:
Java:
    public static void PreparedStatementBLOB(String statement, File file) throws SQLException, IOException{
        Connection connection = DriverManager.getConnection(JDBC_URL);
        PreparedStatement ps = connection.prepareStatement(statement);
        FileInputStream fis = new FileInputStream(file);
        ps.setBinaryStream(1, fis);
        ps.execute();
    }

Methode zum laden:
Java:
public static Image imageStream(String SQL, String ColumnName) throws ClassNotFoundException, SQLException, IOException{
        ResultSet rs = getResultSet(SQL);
        Image i = null;
            while(rs.next()){
                InputStream is = rs.getBinaryStream(1);
                if(is!=null){           
                    i = new Image(is);
                    is.close();
                }else{
                    i = new Image("bibliothek/bilder/kein_flugzeug.png");
                }
            }
        return i;
    }
 

micfire

Mitglied
Sieht ganz gut aus, erfüllt aber nicht ganz meine Anforderungen. Wenn ich mir das so durchlese ist es eher ein Workaround. Das Bild exisitiert fürs Laden in Java und zum Speichern in die Datenbank als File Object. In ein Image Object wird es erst umgewandelt, wenn es in einem ImageView angezeigt werden soll.

Der logische Ablauf aus meiner Sicht wäre, das Bild in Java als File laden, dann die Größenänderung und erstellen eines neuen File Objects, dann 1. Anzeige des daraus generierten Images im ImageView und 2. bei Bedarf Speichern desselben Files in die Datenbank.

Und für diese Größenänderung und vllt. auch Erzeugung eines neuen temp Images habe ich keine Idee zur Umsetzung.
 

dzim

Top Contributor
Da wir uns nun darauf geeinigt haben, dass du eigentlich Bildbearbeitung machen möchtest, ist festzustellen, das JavaFX als GUI-Framework - das im Normalfall eben "nur" für das Entwickeln von (in diesem Fall Rich-Client-) Oberflächen gedacht ist - dafür nicht wirklich die beste Wahl ist.

Dafür musst du mal die Google-Suche bemühen. Z.B., indem du nach "java image processing" suchst.
Beispielhaftes Ergebnis:
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
I ImageView in GridPane: Bildgröße AWT, Swing, JavaFX & SWT 1
W Bildgröße automatisch an Komponenten anpassen AWT, Swing, JavaFX & SWT 3
G IMageIcon Bildgröße ändern AWT, Swing, JavaFX & SWT 7
U Bildgröße AWT, Swing, JavaFX & SWT 3
K Bildgröße auf einem JButton AWT, Swing, JavaFX & SWT 3
F Bildgröße bestimmen AWT, Swing, JavaFX & SWT 2
ZH1896ZH JavaFX Wie kann ich die Fenstergrösse entsprechend dem Inhalt vergrössern/verkleinern AWT, Swing, JavaFX & SWT 2
S Kreis vergrößern/verkleinern mit Buttons AWT, Swing, JavaFX & SWT 1
S Bild mit ImageIcon auf GUI verkleinern AWT, Swing, JavaFX & SWT 3
C LayoutManager Bei verkleinern des Fensters, verschieben sich JPanels übereinander. AWT, Swing, JavaFX & SWT 7
D Gui auslagern/verkleinern AWT, Swing, JavaFX & SWT 5
M Probleme mit Verkleinern eines GUI AWT, Swing, JavaFX & SWT 7
P Bilder verkleinern AWT, Swing, JavaFX & SWT 2
M ImageIcon Bild wird beim verkleinern des Fensters nicht verkleinert AWT, Swing, JavaFX & SWT 3
E Swing Den Button Vergrössern/Verkleinern entfernen AWT, Swing, JavaFX & SWT 4
E Swing JPanels durch ziehen am Rand vergrößern/verkleinern?! AWT, Swing, JavaFX & SWT 2
A AWT Buttons verkleinern AWT, Swing, JavaFX & SWT 7
P ScrollPane klappt zusammen beim verkleinern des Frames AWT, Swing, JavaFX & SWT 2
E Bild effektiv vergrössern / verkleinern (zoom) AWT, Swing, JavaFX & SWT 23
G JComboBox verkleinern AWT, Swing, JavaFX & SWT 6
G Icons verkleinern AWT, Swing, JavaFX & SWT 4
M ImageIcon in JLabel verkleinern AWT, Swing, JavaFX & SWT 8
F Wie Oberfläche verbessern? (JButtons, Textfeld verkleinern) AWT, Swing, JavaFX & SWT 5
A Icon verkleinern AWT, Swing, JavaFX & SWT 3
T BufferedImage verkleinern Resultat ist zu pixelig. AWT, Swing, JavaFX & SWT 6
P Inhalt eines Canvas verkleinern AWT, Swing, JavaFX & SWT 3
D Bilder verkleinern AWT, Swing, JavaFX & SWT 3
D bilder verkleinern AWT, Swing, JavaFX & SWT 3
C Componente verkleinern lasse wenn die Frame verkleinert wird AWT, Swing, JavaFX & SWT 2
G Fenster ohne "verkleinern","Schliessen", AWT, Swing, JavaFX & SWT 4

Ähnliche Java Themen


Oben