MVC 응용 프로그램을 사용하여 이미지를 업로드 할 때 DB에 저장하기 전에 파일 크기를 줄여야하지만 EXIF 데이터는 그대로 유지해야합니다. 이 원본 업로드 된 이미지에서이 문제를 가져온 다음 MetaDataExtractor를 사용하여 크기 조정 된 이미지에 EXIF 다시 추가
MetadataExtractor
를 사용하여 크기가 조정 하나에 추가하는 것입니다 우리는 그런 다음이fext = IO.Path.GetExtension(file.FileName).ToLower
Dim vLen As Integer = file.ContentLength
Dim vData(vLen - 1) As Byte
Dim image_file As System.Drawing.Image = System.Drawing.Image.FromStream(file.InputStream)
Dim image_height As Integer = image_file.Height
Dim image_width As Integer = image_file.Width
Dim max_height As Integer = 240
Dim max_width As Integer = 320
image_height = (image_height * max_width)/image_width
image_width = max_width
If image_height > max_height Then
image_width = (image_width * max_height)/image_height
image_height = max_height
End If
Dim bitmap_file As New System.Drawing.Bitmap(image_file, image_width, image_height)
Using vStream As New IO.MemoryStream
Select Case fext
Case ".jpg"
bitmap_file.Save(vStream, System.Drawing.Imaging.ImageFormat.Jpeg)
Case ".jpeg"
bitmap_file.Save(vStream, System.Drawing.Imaging.ImageFormat.Jpeg)
Case ".png"
bitmap_file.Save(vStream, System.Drawing.Imaging.ImageFormat.Png)
Case ".gif"
bitmap_file.Save(vStream, System.Drawing.Imaging.ImageFormat.Gif)
Case Else
bitmap_file.Save(vStream, System.Drawing.Imaging.ImageFormat.Jpeg)
End Select
vStream.Position = 0
vStream.Read(vData, 0, vStream.Length)
vImageFile = vData
vData = Nothing
End Using
같은 이미지의 크기를 조절이
Dim vMetadata As IEnumerable(Of System.IO.Directory) = MetadataExtractor.ImageMetadataReader.ReadMetadata(file.InputStream)
같은 메타 데이터를 얻을 수 있습니다
그래서 우리는 메타 데이터를 사전으로 저장하고 축소 된 크기의 이미지 파일을 변수 vImageFile로 저장할 수 있습니다 ...
질문은 - 새 파일에 메타 데이터를 다시 추가하려면 어떻게합니까?
는 ---------------- 당신이
가 ------------------- 편집 2017 년 10 월 01 추가 감사 ----
나는 방향 수에 대한 핸들을 얻기 위해이 코드
Dim vOrientationNumber As Integer = 1
Dim vEXIF As String = ""
Dim vDirectories = ImageMetadataReader.ReadMetadata(file.InputStream)
Dim vSub = vDirectories.OfType(Of ExifSubIfdDirectory)().FirstOrDefault
If Not vSub Is Nothing Then
Dim vOrientationObj = vSub.GetObject(ExifDirectoryBase.TagOrientation)
If Not vOrientationObj Is Nothing Then
If Not vOrientationObj.Equals(DBNull.Value) Then
vOrientationNumber = Convert.ToInt16(vOrientationObj)
End If
End If
End If
For Each vDirectory In vDirectories
For Each Tag In vDirectory.Tags
vEXIF += vDirectory.Name & " " & Tag.Name & " " & Tag.Description & Environment.NewLine
Next
Next
을 추가했지만 변수 VSUB는 항상 아무것도 없다. 나는이 이미지로 오리엔테이션 번호가 있다는 것을 알고있다. (메인 WPF 데스크탑 애플 리케이션에서 그것을 발견하고 그것을 회전시킬 때). 내가 지금 잘못하고있는 어떤 생각?
더 많은 정보를 얻기 위해 https://drewnoakes.com/code/exif/sampleUsage.html 링크를 찾았지만 MetadataExtractor에서 JpegSegmentReader를 찾을 수 없습니다. 다른 클래스 이름 아래에 숨겨져 있습니까? – gchq
'MetadataExtractor.Formats.Jpeg' 네임 스페이스에 있습니다. –
방금 전에 시행 착오로 그걸 발견했습니다 ..샘플 코드에서 'Dim segmentReader As New JpegSegmentReader (jpegFile)'에서 'No new is accessible'이라는 문구를 던집니다. 'Metadata Dim Metadata()에 메타 데이터가 있습니까?' – gchq