Example #1
0
        /// <summary>
        /// Initializes a new instance of the <see cref="FileRenameInfo"/> class.
        /// </summary>
        /// <param name="fileName">Name of the file.</param>
        /// <param name="paddingCount">The padding count.</param>
        public FileRenameInfo(string fileName, int paddingCount)
        {
            file = fileName;
            try
            {
                exif = new ExifExtractor(fileName, "\r\n");
            }
            catch (Exception ex)
            {
                // no exif data?
                var debugException = ex;
            }

            info = new FileInfo(file);
            indexPaddingCount = paddingCount;
            Selected          = true;
        }
Example #2
0
 private static byte[] FixExifData(byte[] originalJpegData)
 {
     using (JpegDecoder jpegDecoder = new JpegDecoder())
     {
         using (ExifExtractor exifExtractor = new ExifExtractor())
         {
             using (ExifBuilder exifBuilder = new ExifBuilder())
             {
                 using (new JpegEncoder())
                 {
                     int        outOffset;
                     byte[]     out1;
                     JpegStatus exifData1 = jpegDecoder.GetExifData(out outOffset, out out1, originalJpegData);
                     if (exifData1 == JpegStatus.WrongFormat)
                     {
                         return(originalJpegData);
                     }
                     IconConverter.ThrowExceptionIfJpegResultFail(exifData1);
                     Exif out2;
                     IconConverter.ThrowExceptionIfJpegResultFail(exifExtractor.Parse(out out2, out1));
                     out2.Thumbnail = (byte[])null;
                     IconConverter.ThrowExceptionIfJpegResultFail(jpegDecoder.SetJpegData(originalJpegData));
                     Size dimension = jpegDecoder.GetDimension();
                     IconConverter.ThrowExceptionIfJpegResultFail(exifBuilder.SetExif(out2));
                     byte[] exifData2 = exifBuilder.GetExifData(dimension.Width, dimension.Height);
                     byte[] numArray  = new byte[originalJpegData.Length - out1.Length + exifData2.Length];
                     int    num1      = 0;
                     Array.Copy((Array)originalJpegData, (Array)numArray, outOffset);
                     int destinationIndex1 = num1 + outOffset;
                     Array.Copy((Array)exifData2, 0, (Array)numArray, destinationIndex1, exifData2.Length);
                     int destinationIndex2 = destinationIndex1 + exifData2.Length;
                     Array.Copy((Array)originalJpegData, outOffset + out1.Length, (Array)numArray, destinationIndex2, originalJpegData.Length - (outOffset + out1.Length));
                     int num2  = exifData2.Length - out1.Length;
                     int index = outOffset - 8;
                     int num3  = ((int)originalJpegData[index] << 8) + (int)originalJpegData[index + 1] + num2;
                     numArray[index]     = (byte)(num3 >> 8);
                     numArray[index + 1] = (byte)num3;
                     return(numArray);
                 }
             }
         }
     }
 }
Example #3
0
        public byte[] OrientImage()
        {
            Bitmap        bmp           = _image.ConvertByteArrayToBitmap();
            ExifExtractor exifExtractor = new ExifExtractor(ref bmp, "n");
            object        obj           = exifExtractor["Orientation"];

            if (obj != null)
            {
                RotateFlipType orientation = GetOrientation(Convert.ToInt32(obj));
                if (orientation != RotateFlipType.RotateNoneFlipNone)
                {
                    bmp.RotateFlip(orientation);
                    exifExtractor.SetTag(274, "1");
                    MemoryStream memoryStream = new MemoryStream(_image);
                    bmp.Save(memoryStream, ImageFormat.Jpeg);
                    return(memoryStream.GetBuffer());
                }
            }
            return(_image);
        }
Example #4
0
        private double GetRotation(ExifExtractor exif)
        {
            int orientation = 1;

            try
            {
                var porientation = exif.FirstOrDefault(kvp => kvp.Key == "Orientation");
                int.TryParse(porientation.Value, out orientation);
            }
            catch (Exception ex)
            {
                var debugException = ex; // Intended
            }

            if (orientation == 1)
            {
                return(0.0);
            }
            if (orientation == 6)
            {
                return(90.0);
            }

            // Other cases not handled for now; see http://sylvana.net/jpegcrop/exif_orientation.html
            // Here is the algorithm:

            /*
             * 1) transform="";;
             * 2) transform="-flip horizontal";;
             * 3) transform="-rotate 180";;
             * 4) transform="-flip vertical";;
             * 5) transform="-transpose";;
             * 6) transform="-rotate 90";;
             * 7) transform="-transverse";;
             * 8) transform="-rotate 270";;
             * *) transform="";;
             */

            return(0.0);
        }