2017-05-26 4 views
1

je recherche stackoverflow et j'ai réalisé que GetPropertyItem et SetPropertyItem peuvent modifier les commentaires dans le fichier JPEGVB.NET écrire des commentaires au fichier jpeg programme

Dim images As Image = System.Drawing.Image.FromFile("C:\\Sample.jpeg") 
Dim MSGF As New ArrayList 
Dim ID() As String = {"hello ","i am here"} 
Dim propItem As PropertyItem = images.GetPropertyItem(40092) 
Dim encoderParameters As New EncoderParameters(1) 
encoderParameters.Param(0) = New EncoderParameter(Encoder.Quality, 100L) 

For i = 0 To ID.Length - 1 
    Dim TEMP As String = ID(i) 
    For II = 0 To TEMP.Length - 1 
     MSGF.Add(Convert.ToInt32(TEMP(II))) 
    Next 
Next 
For i = 0 To MSGF.Count - 1 
    propItem.Value.SetValue(Convert.ToByte(MSGF(i)), i) 
Next 

images.SetPropertyItem(propItem) 
images.Save(TextBox1.Text & "\" & "1" & TextBox2.Text) 

Ce que je pris conscience que je peux étais obtenir des commentaires de fichier jpeg par GetPropertyItem. Cependant, les commentaires sont basés sur le code ASCII. Par conséquent, j'essayais de convertir le commentaire que je voulais insérer dans le code ASCII.

propItem.Value.SetValue(Convert.ToByte(MSGF(i)), i) 

Cette partie a été réellement modifiée les commentaires qui existaient déjà dans le fichier jpeg. Cependant, s'il n'y a pas de commentaires dans le fichier jpeg, propItem.value.setValue ne fonctionne pas car il n'y a rien à éditer.

Est-il possible d'ajouter des commentaires au fichier jpeg?

+1

Sur la base de [la page MSDN pour PropertyItem] (https: // msdn. Un objet PropertyItem est utilisé pour extraire et modifier les métadonnées des fichiers image existants, pas pour créer le fichier de propriété. métadonnées. », donc je ne pense pas que l'approche soit correcte. Voir [cette réponse] (https://stackoverflow.com/a/23762564/832052) pour une approche totalement différente, qui semble faire ce dont vous avez besoin. – djv

+0

@djv merci pour votre réponse. Je pense, j'ai vu cette solution avant. Et, j'essayais de convertir la version C# en VB.NET. Mais, ça ne fonctionnait pas très bien. Je souhaite que je peux trouver VB.NET façon d'ajouter des commentaires au fichier jpeg :( – NBB

+0

Avez-vous essayé d'utiliser un [** convertisseur en ligne **] (http://converter.telerik.com)? –

Répondre

2

Basé sur this answer in C#, il pourrait être aussi simple que cela:

Dim jpeg = New JpegMetadataAdapter(pathToJpeg) 
jpeg.Metadata.Comment = "Some comments" 
jpeg.Metadata.Title = "A title" 
jpeg.Save() 
' Saves the jpeg in-place 
jpeg.SaveAs(someNewPath) 
' Saves with a new path 

Voici la classe:

Public Class JpegMetadataAdapter 
    Private ReadOnly path As String 
    Private frame As BitmapFrame 
    Public ReadOnly Metadata As BitmapMetadata 

    Public Sub New(path As String) 
     Me.path = path 
     frame = getBitmapFrame(path) 
     Metadata = DirectCast(frame.Metadata.Clone(), BitmapMetadata) 
    End Sub 

    Public Sub Save() 
     SaveAs(path) 
    End Sub 

    Public Sub SaveAs(path As String) 
     Dim encoder As New JpegBitmapEncoder() 
     encoder.Frames.Add(BitmapFrame.Create(frame, frame.Thumbnail, Metadata, frame.ColorContexts)) 
     Using stream As Stream = File.Open(path, FileMode.Create, FileAccess.ReadWrite) 
      encoder.Save(stream) 
     End Using 
    End Sub 

    Private Function getBitmapFrame(path As String) As BitmapFrame 
     Dim decoder As BitmapDecoder = Nothing 
     Using stream As Stream = File.Open(path, FileMode.Open, FileAccess.ReadWrite, FileShare.None) 
      decoder = New JpegBitmapDecoder(stream, BitmapCreateOptions.PreservePixelFormat, BitmapCacheOption.OnLoad) 
     End Using 
     Return decoder.Frames(0) 
    End Function 
End Class