Laden...

Verlustfreies Drehen eines JPEG-Bildes

Erstellt von cgimda vor 15 Jahren Letzter Beitrag vor 14 Jahren 5.786 Views
C
cgimda Themenstarter:in
37 Beiträge seit 2008
vor 15 Jahren
Verlustfreies Drehen eines JPEG-Bildes

Beschreibung:

Verlustfreies Drehen für JPEG:



Image image = Image.FromFile("image1.jpg");

ImageCodecInfo[] imageCodecInfos = ImageCodecInfo.GetImageEncoders();
ImageCodecInfo imageCodecInfo = null;
for (int i = 0; i < imageCodecInfos.Length; i++)
{
  if (imageCodecInfos[i].MimeType == "image/jpeg")
  {
    imageCodecInfo = imageCodecInfos[i];
    break;
  }
}

EncoderParameters encoderParameters = new EncoderParameters(1);
encoderParameters.Param[0] = new EncoderParameter(
  System.Drawing.Imaging.Encoder.Transformation, 
  (long)EncoderValue.TransformRotate90);

image.Save("image2.jpg", imageCodecInfo, encoderParameters);


Schlagwörter: rotate, rotieren, Rotation, drehen, Drehung, JPG, JPEG, JPEGs, Bild, Bilder, Bitmap, Image, verlustfrei, Kompression, Komprimierung

Gelöschter Account
vor 15 Jahren

Gute Idee 😄👍
Danke , packe ich mir auf jeden Fall weg, für wenn ich es mal brauche...

C
cgimda Themenstarter:in
37 Beiträge seit 2008
vor 14 Jahren

Das verlustfreie Drehen mit dem obengenannten Quelltext funktioniert nicht bei jeder JPEG-Datei. Ich glaube es funktioniert nur bei Bildern, wo die Breite und Höhe der Auflösung durch 16 teilbar ist.

49.485 Beiträge seit 2005
vor 14 Jahren

Hallo zusammen,

richtig, es wird nur dann verlustfrei rotiert, wenn die Kantenlängen des Bildes ein Vielfaches des Blockgröße des JPEG-Bildes sind (typische Blockgrößen sind 8x8 und 16x16). Und das auch nur dann, wenn das Bitmap-Objekt direkt aus der JPEG-Datei geladen wurde und dadurch noch Zugriff auf die komprimierten Originaldaten besteht. Wenn diese Voraussetzungen erfüllt sind, wird durch EncoderValue.TransformRotate90 tatsächlich verlustfrei gedreht. Das habe ich selbst ausprobiert.

herbivore