Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2006
    Messaggi
    103

    [Vb.net] CopyRight Immagini

    Salve a tutti, mi sto imbattendo in un problema che non riesco a risolvere o ho pensato di chiedere aiuto qua sul forum.

    In un programma gestionale, il cliente, vuole che quando carica un immagine sul sito web venga applicato automaticamente il copyright all'immagine.

    Ho utilizzato questo codice:
    codice:
           Dim _Img As Bitmap
    
            Dim _eg As Graphics
    
            Dim _BitCopy As Bitmap
    
            Dim _BitOri As Bitmap
    
            Try
                _BitCopy = CopyImg   'Immagine Copyright
    
                _BitOri = Me.Img     'Immagine originale a cui applicare il copyright
    
    
                _Img = New Bitmap(Me.Img.Width, Me.Img.Height)  'Nuovo Oggetto immagine da restiruire
    
                _Img.SetResolution(72, 72) 'Imposto di default la risoluzione a 72dpi
    
                _eg = Graphics.FromImage(_Img) 'Creo Oggetto Graphics
    
    
    
                _eg.DrawImage(_BitOri, New Rectangle(0, 0, _BitOri.Width, _BitOri.Height)) 'Incollo l'immagine originale nell'oggetto graphics
    
    
                _eg.DrawImage(_BitCopy, New Rectangle((_Img.Width / 2) - _BitCopy.Width / 2, (_Img.Height / 2) - _BitCopy.Height / 2, _BitCopy.Width, _BitCopy.Height)) 'Incollo il copyright al centro dell'immagine
    
                Return _Img
            Catch ex As Exception
                'MsgBox(ex.Message)
                Return Nothing
            End Try
    Il copyright viene applicato correttamente a tutte le immagini. Il problema è che alcune immagini, soprattutto dove c'e molto rosso perdono di qualità.

    Inoltre nelle proprietà delle immagini modificate ho visto che alle voci:
    Unità di risoluzione e Rappresentazione di colore non c'e alcun valore, mentre nelle originali c'è rispettivamente 2 e sRGB.

    Può dipendere da questo?

    All'inizio ho pensato che fosse dovuto al fatto che forzo le immagini a 72dpi perchè alcune sono a 96dpi, però si verifica anche quando l'originale è già a 72dpi.

  2. #2

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2006
    Messaggi
    103
    Si ho già provato ma non cambia niente

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2006
    Messaggi
    103
    Sotto consiglio di Il Totem ho provato a reimpostare Graphics.CompositingQuality su HighQuality modificando il codice in questo modo:

    codice:
     Dim _Img As Bitmap
    
            Dim _eg As Graphics
    
            Dim _BitCopy As Bitmap
    
            Dim _BitOri As Bitmap
    
            Try
                _BitCopy = CopyImg   'Immagine Copyright
    
                _BitOri = Me.Img     'Immagine originale a cui applicare il copyright
    
    
                _Img = New Bitmap(Me.Img.Width, Me.Img.Height)  'Nuovo Oggetto immagine da restiruire
    
                _Img.SetResolution(72, 72) 'Imposto di default la risoluzione a 72dpi
    
                _eg = Graphics.FromImage(_Img) 'Creo Oggetto Graphics
                
                '-------> Imposto qualità alta oggetto grephics
                _eg.CompositingQuality = Drawing2D.CompositingQuality.HighQuality
    
                _eg.DrawImage(_BitOri, New Rectangle(0, 0, _BitOri.Width, _BitOri.Height)) 'Incollo l'immagine originale nell'oggetto graphics
    
    
                _eg.DrawImage(_BitCopy, New Rectangle((_Img.Width / 2) - _BitCopy.Width / 2, (_Img.Height / 2) - _BitCopy.Height / 2, _BitCopy.Width, _BitCopy.Height)) 'Incollo il copyright al centro dell'immagine
    
                Return _Img
            Catch ex As Exception
                'MsgBox(ex.Message)
                Return Nothing
            End Try
    Ma come avevo già provato in precedenza non cambia niente

    Per rendere meglio l'idea ho pensato di allegare un'immagine di esempio:

    Immagine originale:


    Immagine con copy Right


    Notare la scritta rossa, la differenza è palese

  5. #5
    Utente di HTML.it
    Registrato dal
    Dec 2006
    Messaggi
    103
    Aggiungo i link corretti, è scaduto il tempo e non posso più modificare il post precedente, mi scuso per il doppio post


    Immagine originale:
    Immagine Originale



    Immagine con copy Right
    Immagine Copyright

  6. #6
    Sono un po' miope, ma non vedo nessuna perdita di qualità...

  7. #7
    Utente di HTML.it
    Registrato dal
    Dec 2006
    Messaggi
    103
    Come non si vede, guarda il colore del rosso sulla scritta diabolik

  8. #8
    Così ad occhio sembrano artefatti JPEG. La perdita di qualità non sta nel passaggio di aggiunta della scritta, ma nel salvataggio in JPEG, dove devi impostare una qualità di codifica più alta.
    Amaro C++, il gusto pieno dell'undefined behavior.

  9. #9
    Utente di HTML.it
    Registrato dal
    Dec 2006
    Messaggi
    103
    Grazie MItaly, seguendo la tua dritta ho modificato il codice in questo modo:

    Ho aggiunto questo metodo:

    codice:
     Public Function GetEncoder(ByVal format As Imaging.ImageFormat) As Imaging.ImageCodecInfo
    
            Dim codecs As Imaging.ImageCodecInfo() = Imaging.ImageCodecInfo.GetImageDecoders()
    
            Dim codec As Imaging.ImageCodecInfo
            For Each codec In codecs
                If codec.FormatID = format.Guid Then
                    Return codec
                End If
            Next codec
            Return Nothing
    
        End Function
    Prima di salvare l'immagine imposto la qualità in questo modo:

    codice:
    Dim jgpEncoder As Imaging.ImageCodecInfo = _img.GetEncoder(Imaging.ImageFormat.Jpeg)
    
    Dim myEncoder As System.Drawing.Imaging.Encoder = System.Drawing.Imaging.Encoder.Quality
    
    Dim myEncoderParameters As New Imaging.EncoderParameters(1)
    
    Dim myEncoderParameter As New Imaging.EncoderParameter(myEncoder, 100)
    
    myEncoderParameters.Param(0) = myEncoderParameter
    
    
    _imgcopi.Save(CartellaCopyLbl.Text & "/" & _File.Name, jgpEncoder, myEncoderParameters)
    Immagine con qualità 100

    Il risultato, se pur migliore del precedente, è comunque di qualità inferiore rispetto all'originale

    Sbaglio qualcosa?
    Era questo che intendevi per impostare la qualità del jpeg più alta?

    Grazie

  10. #10
    Sì, intendevo quello (anche se qualità 100 in genere è eccessiva, 90 è già un'ottima qualità); in effetti vedo anch'io che i colori virano leggermente e che i contorni della scritta risultano un po' più sfocati. Proviamo ad isolare il problema: se salvi l'immagine in un formato lossless (ad esempio png o bmp) si ha comunque perdita di qualità?
    Amaro C++, il gusto pieno dell'undefined behavior.

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.