From ca449ed86a46b676368fe0e1644e3828855318d0 Mon Sep 17 00:00:00 2001
From: ulrich <undisclosed>
Date: Wed, 08 Mar 2017 06:41:27 +0000
Subject: [PATCH] Bildroutinen hinzugefuegt

---
 src/de/uhilger/wbx/Bild.java |  174 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 174 insertions(+), 0 deletions(-)

diff --git a/src/de/uhilger/wbx/Bild.java b/src/de/uhilger/wbx/Bild.java
new file mode 100644
index 0000000..6765204
--- /dev/null
+++ b/src/de/uhilger/wbx/Bild.java
@@ -0,0 +1,174 @@
+/*
+    Dateiverwaltung - File management in your browser
+    Copyright (C) 2017 Ulrich Hilger, http://uhilger.de
+
+    This program is free software: you can redistribute it and/or modify
+    it under the terms of the GNU Affero General Public License as
+    published by the Free Software Foundation, either version 3 of the
+    License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU Affero General Public License for more details.
+
+    You should have received a copy of the GNU Affero General Public License
+    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+*/
+
+package de.uhilger.wbx;
+
+import java.awt.Graphics2D;
+import java.awt.Image;
+import java.awt.RenderingHints;
+import java.awt.image.BufferedImage;
+import java.awt.image.ConvolveOp;
+import java.awt.image.Kernel;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.net.FileNameMap;
+import java.net.URLConnection;
+import javax.imageio.ImageIO;
+
+/**
+ * Methoden zur Verkleinerung von Bildern
+ */
+public class Bild {
+  
+  public static final int WINZIG = 0;
+  public static final int KLEIN = 1;
+  public static final int MITTEL = 2;
+  public static final int GROSS = 3;
+  
+  public static final String[] GRNAME = {"-w", "-k", "-m", "-g"};
+  public static final int[] GR = {120, 240, 700, 1200};
+  
+  /**
+   * 
+   * @param image
+   * @param gr
+   * @param mimeType
+   * @param oName Name der Originaldatei
+   * @param vName Name der verkleinerten Datei
+   * @throws InterruptedException
+   * @throws IOException 
+   */
+  public void writeImageFile(Image image, int gr, String mimeType, String oName, String vName) throws InterruptedException, IOException {
+    int q = 90;
+    float sh = 0.f;
+    //String mimeType = photo.getMimetype();
+    BufferedImage img;
+    if(mimeType.contains("jpeg")) {
+      img = getReducedImage(image, gr, gr, q, sh, false);
+    } else {
+      img = getReducedImage(image, gr, gr, q, sh, true);
+    }
+    ImageIO.write(img, imgType(mimeType), new File(vName));
+  }
+
+  /**
+   * Eine in Groesse und Qualitaet verringerte Bilddatei erzeugen
+   * @param image  Ablageort und Name der Bilddatei
+   * @param width  neue Breite
+   * @param height  neue hoehe
+   * @param quality neue Qualitaet (0 - 100)
+   * @param factor Faktor fuer Schaerfe / Unschaerfe (z.B. -0.15f fuer leichte Unschaerfe, 0.05f fuer leichtes Nachschaerfen)
+   * @param withTransparency ob Transparenz benoetigt wird
+   * @return neues, in Groesse und Qualitaet entsprechend verringertes Bild
+   * @throws java.lang.InterruptedException
+   * @throws java.io.FileNotFoundException
+   */
+  public BufferedImage getReducedImage(Image image, int width, int height, int quality, float factor, boolean withTransparency) 
+  throws InterruptedException, FileNotFoundException, IOException {
+
+    int imageWidth = image.getWidth(null);
+		int imageHeight = image.getHeight(null);
+
+  	int thumbWidth = width;
+		int thumbHeight = height;
+    if(imageWidth < width) {
+      thumbWidth = imageWidth;    
+    }
+    if(imageHeight < height) {
+      thumbHeight = imageHeight;
+    }
+		double thumbRatio = (double)thumbWidth / (double)thumbHeight;
+		double imageRatio = (double)imageWidth / (double)imageHeight;
+		if (thumbRatio < imageRatio) {
+			thumbHeight = (int)(thumbWidth / imageRatio);
+		}
+		else {
+			thumbWidth = (int)(thumbHeight * imageRatio);
+		}
+
+		// draw original image to thumbnail image object and
+		// scale it to the new size on-the-fly
+		//BufferedImage thumbImage = new BufferedImage(thumbWidth, thumbHeight, BufferedImage.TYPE_INT_RGB);
+    BufferedImage thumbImage;
+    if(withTransparency) {
+  	  thumbImage = new BufferedImage(thumbWidth, thumbHeight, BufferedImage.TYPE_INT_ARGB);
+    } else {
+      thumbImage = new BufferedImage(thumbWidth, thumbHeight, BufferedImage.TYPE_INT_RGB);
+    }
+		Graphics2D graphics2D = thumbImage.createGraphics();
+		graphics2D.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
+		graphics2D.drawImage(image, 0, 0, thumbWidth, thumbHeight, null);
+
+		// 30.7.2007: sharpening hinzugefuegt (Anfang)
+		//float factor = -0.15f; // minus = sharpen, plus = soften
+		//float[] sharpenArray = {0, -1, 0, -1, 5, -1, 0, -1, 0};
+    
+    /*
+      30.6.2013: sharpening als Weichmacher nur, wenn Bild < 400
+    */
+    /*if(thumbWidth < 400 || thumbHeight < 400) {
+      factor = 0.1f;
+    }*/
+    
+		if(factor != 0.f) {
+			float[] array = {0, factor, 0, factor, 1-(factor*4), factor, 0, factor, 0};
+			Kernel kernel = new Kernel(3, 3, array);
+			ConvolveOp cOp = new ConvolveOp(kernel, ConvolveOp.EDGE_NO_OP, null);
+			thumbImage = cOp.filter(thumbImage, null);
+		}
+		// 30.7.2007: sharpening hinzugefuegt (Ende)
+    
+    return thumbImage;
+  }
+  
+  public String imgType(String mimeType) {
+    String imgType;
+    if(mimeType.contains("jpg")) {
+      imgType = "jpg";
+    } else if(mimeType.contains("jpeg")) {
+      imgType = "jpg";
+    } else if(mimeType.contains("png")) {
+      imgType = "png";
+    } else if(mimeType.contains("gif")) {
+      imgType = "gif";
+    } else {
+      imgType = "jpg";
+    }
+    return imgType;
+  }
+  
+  /**
+   * 
+   * @param v Bild.WINZIG .. Bild.GROSS
+   * @return L&auml;nge der l&auml;ngsten Kante in Bildpunkten
+   */
+  public int getVariantenGroesse(int v) {
+    return GR[v];
+  }
+  
+  public String getVariantenName(int v) {
+    return GRNAME[v];
+  }
+  
+  public String getMimeType(File file) {
+    String absName = file.getAbsolutePath();
+    FileNameMap fileNameMap = URLConnection.getFileNameMap();
+    return fileNameMap.getContentTypeFor("file://" + absName);    
+  }
+}

--
Gitblit v1.9.3