WebBox Klassenbibliothek
ulrich
2018-03-04 671a35a1f6af8c5faa5f52e626e6ba3cdbab2b17
Verkleinern fuer Hochformat geaendert
1 files modified
89 ■■■■■ changed files
src/de/uhilger/wbx/Bild.java 89 ●●●●● patch | view | raw | blame | history
src/de/uhilger/wbx/Bild.java
@@ -15,7 +15,6 @@
    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;
@@ -68,20 +67,97 @@
    int q = 90;
    float sh = 0.f;
    if(mimeType.contains("jpeg")) {
      img = getReducedImage(image, gr, gr, q, sh, false);
      img = getReducedImage2(image, gr, gr, q, sh, false);
    } else {
      img = getReducedImage(image, gr, gr, q, sh, true);
      img = getReducedImage2(image, gr, gr, q, sh, true);
    }
    return img;
  }
  /**
   * 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 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 getReducedImage2(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(imageWidth > imageHeight) {
      // Querformat
      thumbHeight = (int) (thumbWidth / imageRatio);
    } else if(imageWidth == imageHeight) {
      // 1:1 kann so bleiben
    } else {
      // Hochformat
      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;
  }
  /**
   * 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
@@ -105,8 +181,7 @@
        double imageRatio = (double)imageWidth / (double)imageHeight;
        if (thumbRatio < imageRatio) {
            thumbHeight = (int)(thumbWidth / imageRatio);
        }
        else {
    } else {
            thumbWidth = (int)(thumbHeight * imageRatio);
        }
@@ -126,14 +201,12 @@
        // 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);