Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2002
    Messaggi
    336

    [VB2008] Ridimensionare immagine e mantenere exif

    Ciao, utilizzo la seguente funzione per ridimensionare le immagini.
    Funziona correttamente, ma, a causa della riga evidenziata, i dati exif non vengono riportati nell'immagine ridimensionata.

    C'è un modo per ridimensionare un'immagine senza perdere i dati exif?

    codice:
        Public Function ResizeImage(ByVal percorsoImmagine As String, ByVal destinazioneImmagine As String) As Boolean
            Dim bm As Bitmap
            'dimensioni  originali
            Dim originalX As Integer
            Dim originalY As Integer
            'dimensioni finali
            Dim destinationX As Integer
            Dim destinationY As Integer
            'carica immagine originale
            bm = New Bitmap(percorsoImmagine)
            'ricava dimensioni originali dell'immagine
            originalX = bm.Width
            originalY = bm.Height
            'imposta dimensioni finali
            destinationX = 1600
            destinationY = 1600
            If originalX > originalY Then
                If originalX > 1600 Then
                    destinationX = 1600
                    destinationY = CInt((destinationX / originalX) * originalY)
                Else
                    destinationX = originalX
                    destinationY = originalY
                End If
            ElseIf originalY > originalX Then
                If originalY > 1600 Then
                    destinationX = CInt((destinationY / originalY) * originalX)
                    destinationY = 1600
                Else
                    destinationX = originalX
                    destinationY = originalY
                End If
            ElseIf originalX = originalY Then
                If originalY > 1600 Then
                    destinationX = 1600
                    destinationY = 1600
                Else
                    destinationX = originalX
                    destinationY = originalY
                End If
            End If
            'riduzione dell'immagine
            Dim thumb As New Bitmap(destinationX, destinationY) 
            
            Dim g As Graphics = Graphics.FromImage(thumb)
    
            g.InterpolationMode = Drawing2D.InterpolationMode.HighQualityBicubic
            g.DrawImage(bm, New Rectangle(0, 0, destinationX, destinationY), New Rectangle(0, 0, bm.Width, bm.Height), GraphicsUnit.Pixel)
            g.Dispose()
            thumb.Save(destinazioneImmagine, System.Drawing.Imaging.ImageFormat.Jpeg)
            bm.Dispose()
            thumb.Dispose()
            Return True
        End Function

  2. #2
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    53
    Ciao, modificherei

    Dim thumb As New Bitmap(destinationX, destinationY)


    in

    Dim thumb As Bitmap = bm.Clone


    Facci sapere.

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2002
    Messaggi
    336
    Purtroppo una cosa del genere l'avevo già provata, ma non passando le nuove dimensioni mantengo sì gli exif, ma mi va ad incollare l'immagine ridimensionata sopra quella a dimensioni normali.

    Possibile che non ci sia il modo di risettare l'altezza e la larghezza del file originale senza creare un'immagine nuova?



    Edit:
    ho risolto giocando un po' coi metodi di Bitmap che permettono di recuperare l'elenco dei metadata e inserirlo in una nuova immagine:



    codice:
    Public Function ResizeImage(ByVal percorsoImmagine As String, ByVal destinazioneImmagine As String) As Boolean
            Dim bm As Bitmap
            'dimensioni  originali
            Dim originalX As Integer
            Dim originalY As Integer
            'dimensioni finali
            Dim destinationX As Integer
            Dim destinationY As Integer
            'carica immagine originale
            bm = New Bitmap(percorsoImmagine)
            'ricava dimensioni originali dell'immagine
            originalX = bm.Width
            originalY = bm.Height
            'imposta dimensioni finali
            destinationX = 1600
            destinationY = 1600
            If originalX > originalY Then
                If originalX > 1600 Then
                    destinationX = 1600
                    destinationY = CInt((destinationX / originalX) * originalY)
                Else
                    destinationX = originalX
                    destinationY = originalY
                End If
            ElseIf originalY > originalX Then
                If originalY > 1600 Then
                    destinationX = CInt((destinationY / originalY) * originalX)
                    destinationY = 1600
                Else
                    destinationX = originalX
                    destinationY = originalY
                End If
            ElseIf originalX = originalY Then
                If originalY > 1600 Then
                    destinationX = 1600
                    destinationY = 1600
                Else
                    destinationX = originalX
                    destinationY = originalY
                End If
            End If
            'riduzione dell'immagine
            Dim thumb As New Bitmap(destinationX, destinationY)
    
            Dim elencoExif() As Integer = bm.PropertyIdList
            For i = 0 To UBound(elencoExif) - 1
                Dim propItem As Imaging.PropertyItem = bm.GetPropertyItem(elencoExif(i))
                thumb.SetPropertyItem(propItem)
            Next 
            
     
            Dim g As Graphics = Graphics.FromImage(thumb)
    
            g.InterpolationMode = Drawing2D.InterpolationMode.HighQualityBicubic
            g.DrawImage(bm, New Rectangle(0, 0, destinationX, destinationY), New Rectangle(0, 0, bm.Width, bm.Height), GraphicsUnit.Pixel)
            g.Dispose()
            thumb.Save(destinazioneImmagine, System.Drawing.Imaging.ImageFormat.Jpeg)
            bm.Dispose()
            thumb.Dispose()
            Return True
        End Function

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.