/// <summary> /// Crops JPEG image losslessly /// </summary> private static void CropJpegLosslessly() { using (var losslessJpeg = new LosslessJpeg("../../../../_Input/Chicago.jpg")) { losslessJpeg.WriteCropped("../../../../_Output/CropJpegLosslessly.jpg", new System.Drawing.Rectangle(64, 40, 157, 117)); } }
/// <summary> /// Flips JPEG image losslessly /// </summary> private static void FlipJpegLosslessly() { using (var losslessJpeg = new LosslessJpeg("../../../../_Input/Chicago.jpg")) { losslessJpeg.WriteRotated("../../../../_Output/FlipJpegLosslessly.jpg", System.Drawing.RotateFlipType.RotateNoneFlipX); } }
private static void RotateJpegWithRecompression(string pathIn, string pathOut, uint orientation) { using (var losslessJpeg = new LosslessJpeg(pathIn)) { System.Drawing.RotateFlipType flipType; switch (orientation) { case 2: flipType = System.Drawing.RotateFlipType.RotateNoneFlipX; break; case 3: flipType = System.Drawing.RotateFlipType.Rotate180FlipNone; break; case 4: flipType = System.Drawing.RotateFlipType.Rotate180FlipX; break; case 5: flipType = System.Drawing.RotateFlipType.Rotate90FlipX; break; case 6: flipType = System.Drawing.RotateFlipType.Rotate90FlipNone; break; case 7: flipType = System.Drawing.RotateFlipType.Rotate270FlipX; break; case 8: flipType = System.Drawing.RotateFlipType.Rotate270FlipNone; break; default: flipType = System.Drawing.RotateFlipType.RotateNoneFlipNone; break; } losslessJpeg.Exif[ExifDictionary.Orientation] = 1; losslessJpeg.WriteRotated(pathOut, flipType); } }
/// <summary> /// Updates metdata of JPEG image without recompression /// </summary> private static void UpdateJpegMetadataLosslessly() { using (var losslessJpeg = new LosslessJpeg("../../../../_Input/Chicago.jpg")) { // IPTC if (losslessJpeg.Iptc == null) { losslessJpeg.Iptc = new IptcDictionary(); } losslessJpeg.Iptc[IptcDictionary.Caption] = "Mountain"; // EXIF if (losslessJpeg.Exif == null) { losslessJpeg.Exif = new ExifDictionary(); } losslessJpeg.Exif[ExifDictionary.Software] = "Aurigma Graphics Mill"; // XMP var xmp = new XmpData(); if (losslessJpeg.Xmp != null) { xmp.Load(losslessJpeg.Xmp); } var node = new XmpValueNode(XmpNodeType.SimpleProperty, "John Doe", XmpTagNames.DCContributor); xmp.AddNode(node); losslessJpeg.Xmp = xmp.Save(); // Adobe image resource blocks if (losslessJpeg.AdobeResources == null) { losslessJpeg.AdobeResources = new AdobeResourceDictionary(); } const int copyrightFlag = 0x040A; var arBlock = new AdobeResourceBlock("Copyright", new byte[] { 1 }); losslessJpeg.AdobeResources[copyrightFlag] = arBlock; losslessJpeg.Write("../../../../_Output/UpdateJpegMetadataLosslessly.jpg"); } }
/// <summary> /// Applies mosaic effect on region of image with partial JPEG recompression /// </summary> private static void RecompressJpegPartially() { var rect = new System.Drawing.Rectangle(264, 192, 264, 184); using (var patchBitmap = new Bitmap()) { // Apply crop and mosaic transfroms using (var reader = ImageReader.Create("../../../../_Input/Chicago.jpg")) using (var crop = new Crop(rect)) using (var mosaic = new Mosaic(10, 10)) { Pipeline.Run(reader + crop + mosaic + patchBitmap); } // Patch JPEG using (var losslessJpeg = new LosslessJpeg("../../../../_Input/Chicago.jpg")) { rect = losslessJpeg.AlignToMCUSize(rect, JpegAlignToSampleSizeMode.Patch); losslessJpeg.WritePatched("../../../../_Output/ResompressJpegPartially.jpg", rect.Location, patchBitmap); } } }