Пример #1
0
 /// <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));
     }
 }
Пример #2
0
 /// <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);
     }
 }
Пример #3
0
    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);
        }
    }
Пример #4
0
        /// <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");
            }
        }
Пример #5
0
        /// <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);
                }
            }
        }