/// <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; }
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); } } } } }
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); }
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); }