2016-12-09 2 views
2

Ich versuche eine Bildkomprimierungsfunktion zu implementieren, die auf Bildern verwendet wird, die auf meine Website hochgeladen werden. Ich möchte das Originalbild aufnehmen und 3 verschiedene Größen/Qualitätsstufen speichern. Dazu benutze ich ImageProcessor.ImageFactory. Die drei Ebenen:ImageProcessor.ImageFactory Komprimierung reduziert die Bilddateigröße nicht

Was passiert ist, dass die mittleren und kleinen Bilder nicht die erwartete kleinere Dateigröße haben.

Ein Beispiel: Originalbild ist ein .jpg 3000x3000, das 3,7 MB groß ist.

Die große Bildgrße 2.96MB Das Medium wird die Bildgröße 2.63MB Die kleine Bildgröße ist 2.62MB

ich folgendes auf das kleine Bild versucht, es Qualität zu 10% weiter zu komprimieren:

// Encoder parameter for image quality 
EncoderParameter qualityParam = new EncoderParameter(Encoder.Quality, 10); 
// JPEG image codec 
ImageCodecInfo jpegCodec = GetEncoderInfo("image/jpeg"); 
EncoderParameters encoderParams = new EncoderParameters(1); 
encoderParams.Param[0] = qualityParam; 
img.Save(path, jpegCodec, encoderParams); 

das Endergebnis ist deutlich geringer Qualität, aber die Größe der Bilddatei ist noch

2.62MB

Edit: hochgeladen Originalbilder geteilt auf postimg

Das Medium Bild:

Yellow-116-Ravenna-7-Back-View.jpg

Das kleine Bild:

Yellow-116-Ravenna-7-Back-View.jpg

Das kleine Bild komprimiert:

Yellow-116-Ravenna-7-Back-View.jpg

Das Originalbild:

Yellow-116-Ravenna-7-Back-View.jpg

+0

sicher das Ausgabeformat ist 'jpeg'? '.BackgroundColor (Color.Transparent)' deutet auf ein Transparenz unterstützendes Format hin, welches 'jpeg' nicht ist. Wenn ich die "Medium" -Datei (77,8 kB) nehme, sie in Paint.NET einspeise und sie als JPEG mit 10% Encoder-Qualität speichere, bekomme ich ein 3,58 kB Bild, das funktioniert wie erwartet. Können Sie die originale 3000x3000px Datei hochladen? –

+0

aber große angehängte Bilddateigröße ist '78KB' und kleinste ist' 21KB' – esiprogrammer

+0

@MaximilianGerhardt - SO erlaubt mir nicht, das ursprüngliche Bild (oder die md- oder SM-Bilder) hochzuladen, da sie über 2mb sind. Ich werde versuchen, die Bilder zu hosten und sie zu teilen. – Carel

Antwort

4

Bei einer weiteren Untersuchung des Bildes, sind die EXIF-Daten wirklich das Problem mit dieser Datei. Es enthält einen Abschnitt mit einem benutzerdefinierten Farbprofil und enthält Daten mit einer Größe von ca. 2,64 MB. Dies können Sie überprüfen, indem Sie das Bild unter http://regex.info/exif.cgi hochladen und auf "ICC-Profildaten anzeigen" klicken.

enter image description here

entkleiden, dass seltsame Profildaten des extremen Kopfes entledigen und bringen Sie die Dateigröße auf 348 KB zu 1000x1000 Pixeln.

Wie Sie bereits selbst herausgefunden haben, müssen Sie den Parameter preserveExifData im Konstruktor des Objekts ImageFactory auf false setzen, damit die Daten entfernt werden. Oder rufen Sie den Standard-Konstruktor als

ImageFactory imageFactory = new ImageFactory(); 
+0

Gute Ermittlungsarbeit! –

0

Wenn ImageProcessor verwendet, ist es möglich, eine Option in der processing.config

<processing preserveExifMetaData="true" fixGamma="false" interceptAllRequests="false" allowCacheBuster="true"> 

Einstellung preserveExifMetaData="false", um den EXIF-Daten aswell entfernt.

Sie können auch die Option im Konstruktor festgelegt imagefactory:

var imageFactory = new ImageFactory(preserveExifData:true); 
Verwandte Themen