2016-12-21 2 views
0

Ich versuche, Bilder mit Thumnailator Bibliothek zu drehen. Der Code, den ich verwende, ist wie unten gezeigt. Es dreht das Bild oder flippt das Bild erfolgreich, aber die Farbqualität wird komplett verpfuscht. Die Eingabe- und Ausgabebilder werden ebenfalls angezeigt.Thumbnailator Image Rotation vermasselt das Bild

package com.abk; 

import java.awt.image.BufferedImage; 
import java.io.File; 
import java.io.FileInputStream; 
import java.io.FileNotFoundException; 
import java.io.IOException; 
import java.io.InputStream; 
import java.util.Iterator; 

import javax.imageio.ImageIO; 
import javax.imageio.ImageReader; 
import javax.imageio.stream.ImageInputStream; 

import net.coobird.thumbnailator.Thumbnails; 
import net.coobird.thumbnailator.filters.Flip; 
import net.coobird.thumbnailator.filters.Rotation; 
import net.coobird.thumbnailator.util.exif.ExifUtils; 
import net.coobird.thumbnailator.util.exif.Orientation; 

public class ImageAutoRotate { 
    public static void main(String[] args) { 
     try { 
      BufferedImage img = ImageIO.read(new File("314.jpg")); 
      BufferedImage newImg = Rotation.RIGHT_90_DEGREES.apply(img); 
      BufferedImage flipImg = Flip.HORIZONTAL.apply(img); 

      File outputfile = new File("314_2.jpg"); 
      ImageIO.write(newImg, "jpg", outputfile); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
    } 
} 

Eingang Bild enter image description here Ausgabebild Output Image

+0

Das Ergebnis link gezeigt sieht aus wie fälschlicherweise als RGB interpretiert. – haraldK

+0

Das Bild ist RGB selbst ... Gibt es eine Möglichkeit, es zu zwingen, das Bild als RGB –

+0

zu interpretieren Das Original ist als YCbCr gespeichert (die meisten JPEGs sind), aber Decoder konvertieren dies in RGB. Die Ausgabe ist wahrscheinlich RGBA (4 Kanäle), bevor Sie es schreiben, aber da das JPEG einen Adobe-Marker mit "unbekannter" Transformation enthält, wird das Bild als CMYK (!) Interpretiert ... Quickfix: Verwenden Sie PNG für die Ausgabe ODER ändern Sie das Bild zu 'TYPE_3BYTE_BGR' oder' TYPE_INT_RGB'. – haraldK

Antwort

1

das Problem gelöst, indem das Bild als PNG-Bild gespeichert werden. Die Frage wurde tatsächlich verursacht, weil das Bildprofil wurde als CMYK-Farben behandelt wird, während

Der endgültige Code speichert dieses Problem zu lösen, wird in diesem YCbCr