Avatar billede kev. Nybegynder
31. august 2006 - 10:28 Der er 15 kommentarer og
1 løsning

Vandmærker på billeder

Hejsa,

Jeg har lavet et billedegalleri, som virker fint fint. Man kan uploade billeder, hvorefter de resizes, navngives og der genereres en thumbnail.

Nu vil jeg så gerne have, at der tilføjes et vandmærke på de billeder, der uploades. Som med DKBN og NightLeif, så kan jeg sagtens få et logo til at ligge nede i hjørnet, det er let nok med AddImage.

Det jeg gerne vil have er, at logoet bliver nedtonet (lidt a la opacity = 50 % eller noget i den stil), men kan det lade sig gøre med aspImage? Hvis ikke, kender nogen så et program, hvor det KAN lade sig gøre?

Svar må meget gerne blive ledsaget af kildekode, da jeg kun lige mangler de sidste par linjer kode, før jeg er færdig.

// Kevin
Avatar billede thesurfer Nybegynder
31. august 2006 - 10:40 #1
Der er noget her på italiensk: http://forum.html.it/forum/showthread.php?s=&postid=9180315

Men ASP koden er på engelsk :)
Avatar billede nythjem Nybegynder
31. august 2006 - 10:42 #2
Hej Kevin!

Det kommer jo helt an på den version du har fra serverobjects.

Der er en variabel i forbindelse med addimage der hedder AddImageTransparent med følgende syntaks:

- Image.AddImageTransparent "d:\apps\gr3\im.jpg", 5, 12, vbWhite

Læs mere her:
http://www.serverobjects.com/comp/Aspimage.htm (cirka midt på siden)
Avatar billede kev. Nybegynder
31. august 2006 - 10:44 #3
Hej nythjem,

Det er også AddImageTransparent, jeg bruger (skrev vist kun AddImage), og den fjerner blot baggrunden fra logoet, når det lægges ovenpå billedet (ellers ville der være en ramme/baggrund på logoet).
Avatar billede kev. Nybegynder
31. august 2006 - 10:50 #4
Hej thesurfer,

Umiddelbart ser det italienske kode blot ud til at anvende DoMerge, og denne har jeg også afprøvet, men ved DoMerge skal billederne være lige store (logoet må ikke være mindre, for så strækker aspImage logoet til at have samme størrelse som billedet).

Løste dette problem med at lave en ny instans af Image-objekt og lave et hvidt billede, der har samme størrelse som original-billedet og tilføje logoet til dette hvide billede. Derefter har logoet så samme størrelse som original-billedet, men da baggrunden på logoet er hvid, tones hele original-billedet ned, når man anvender DoMerge (logoet bliver halv-transparent, som jeg ønsker, men hele original-billedet er tonet ned og ser derfor mat ud).

En løsning kunne dog være, hvis det er muligt at definere transparent som en farve i aspImage (ved jeg ikke, om man kan), for så kunne jeg lave en transparent-billede i samme størrelse som original-billedet, tilføje logoet til dette transparente billede og lave en DoMerge, derved bliver resten af original-billedet ikke nedtonet.
Avatar billede thesurfer Nybegynder
31. august 2006 - 10:53 #5
kev.> Jeg kender desværre intet til AspImage.. Jeg fandt bare siden via en søgning på Google..
Avatar billede kev. Nybegynder
31. august 2006 - 11:00 #6
Hej igen thesurfer,

Det er også fair nok, så søger du bedre end jeg gør :-) Har været i gang på Google også, men fandt ikke noget brugbart.

Det sidste kode-eksempel på det forum-link, du sendte, ligner dog meget det, jeg har forsøgt, så jeg vil lige afprøve det... Det er dog lidt svært af finde rundt i, når både beskrivende tekst og kode-variabler er skrevet på italiensk.
Avatar billede nythjem Nybegynder
31. august 2006 - 11:07 #7
:)

Jeg har kigget lidt, har desværre ikke mulighed for lige pt. at downloade produktet, men søg lige efter "alpha channel" i din dokumentation.

Der står i deres faq, at det er understøttet..
Avatar billede kev. Nybegynder
31. august 2006 - 11:14 #8
Hej igen nythjem,

Ja, alpha channels er understøttet (aspImage skulle vistnok kunne læse transparente gif's og png's), men deres dokumentation stinker:

http://www.serverobjects.com/comp/Aspimage.htm

Og angiver ikke noget om, at man kan arbejde med opacity (f.eks. objImage.Opacity = 50 %) og angiver heller ikke noget om, at man kan arbejde med transparens som en farve (f.eks. vbTransparent).

Tror dog, at jeg har gennemskuet den italienske kode, og den har en smart løsning, som jeg selv var inde på. Altså det at lave et nyt billede med samme størrelse som original-billedet. Jeg laver dog en hvid firkant og placerer logoet herpå, hvor italieren tager et meget stort transparent-billede (uden noget som helst grafik) og beskrærer til original-billedets størrelse, hvorefter logoet tilføjes.

Dermed burde jeg får et logo på "samme størrelse" som original-billedet, men med transparent baggrund, så jeg uden problemer kan lave en DoMerge (se min tidligere kommentarer til thesrufer).
Avatar billede nythjem Nybegynder
31. august 2006 - 11:19 #9
Hehe.. Har lige downloadet den alligevel og må absolut give dig ret i at det er dårlig dokumentation.

Jeg ville skrive til deres support ;) Men lyder godt hvis du kan løse den med ovenstående løsning..
Avatar billede kev. Nybegynder
31. august 2006 - 11:22 #10
Hej igen igen nythjem,

Regner med at min idé virker, tester det efter frokost og smider et svar her i tilfælde af, at andre kan bruge det.
Avatar billede lund_dk Praktikant
31. august 2006 - 11:30 #11
Skal selvbruge noget ligende.. så hvis din test virker, så må du meget gerne poste scriptet :)
Avatar billede kev. Nybegynder
31. august 2006 - 13:15 #12
Jeg beklager at måtte meddele, at jeg opgiver. Den lede aspImage-komponent nægter sgu at følge mine idéer :-) Er ikke sikker på, at DoMerge kan håndtere transparens.

Her er det kode, jeg har arbejdet med:


Function TilfoejLogo(fil,format)

    TilfoejLogo = False

    Dim objImage, objImageLogo, intX, intY, intLogoX, intLogoY
    Dim strBilledLogo, strBilledLogoTemp, strBilledSpacer, strBilledTekst

    strBilledLogo = Server.Mappath("filer/!logo.bmp")
    strBilledLogoTemp = Left(strBilledLogo,(len(strBilledLogo)-4)) & " _temp.gif"
    strBilledSpacer = Server.Mappath("filer/!spacer.gif")
    strBilledTekst = "© Imagehuset"

    Set objImage = Server.CreateObject("AspImage.Image")

    objImage.LoadImage (Server.Mappath("filer/" & fil))

    intX = objImage.MaxX
    intY = objImage.MaxY


        Set objImageLogo = Server.CreateObject("AspImage.Image")

        objImageLogo.LoadImage (strBilledSpacer)
        objImageLogo.Resize intX, intY
        objImageLogo.CropImage 0, 0, intX, intY

            intLogoX = 2
            intLogoY = intY-52

        'If objImageLogo.Transparent = True Then
            objImageLogo.TransparentColor = vbWhite
            objImageLogo.AddImage strBilledLogo, intLogoX, intLogoY
            'objImageLogo.DoMerge strBilledLogo, 50
        'Else
        '    Response.Write("aspImage ver.: " & objImage.Version & "<br>")
        '    Response.Write("FEJL !!!! !!!!<br>")
        '    Response.End
        'End If

        objImageLogo.ImageFormat = 5
        objImageLogo.FileName = strBilledLogoTemp
        objImageLogo.SaveImage

        Set objImageLogo = Nothing


    If strBilledLogo <> "" Then

        intLogoX = 2
        intLogoY = intY-52

        'objImage.AddImageTransparent strBilledLogo, intLogoX, intLogoY, vbWhite
        'objImage.AddImage strBilledLogo, intLogoX, intLogoY
        'objImage.DoMerge strBilledLogo, 50

        'objImage.AddImageTransparent strBilledLogoTemp, 0, 0, vbWhite
        'objImage.AddImage strBilledLogoTemp, 0, 0
        objImage.DoMerge strBilledLogoTemp, 50

    Else

        objImage.FontColor = vbBlack
        objImage.Italic = False
        objImage.Bold = True
        objImage.FontName = "Verdana"
        objImage.FontSize = 10
        objImage.PadSize = 4
        objImage.AntiAliasText = True
        objImage.TransparentText = True

        intLogoX = objImage.TextWidth (strBilledTekst)
        intLogoY = objImage.TextHeight (strBilledTekst)

        objImage.TextOut strBilledTekst, 0, ((intY-intLogoY)-5), false

    End If


    If format = 1 Then
        ' JPG
        objImage.ImageFormat = 1
    ElseIf format = 2 Then
        ' BMP
        objImage.ImageFormat = 2
    ElseIf format = 3 Then
        ' PNG
        objImage.ImageFormat = 3
    ElseIf format = 4 Then
        ' WBMP (ikke medtaget)
    ElseIf format = 5 Then
        ' GIF
        objImage.ImageFormat = 5
    ElseIf format = 6 Then
        ' TGA (ikke medtaget)
    ElseIf format = 7 Then
        ' PCX (ikke medtaget)
    Else
        ' UKENDT
    End If


    objImage.FileName = Server.Mappath("filer/" & fil)
    objImage.SaveImage

    Set objImage = Nothing


    'DeleteFile(strBilledLogoTemp)


    TilfoejLogo = True

End Function
Avatar billede nythjem Nybegynder
31. august 2006 - 13:40 #13
Har du prøvet med parametrene

Image.Alpha 50
Image.AlphaChannel 50
Image.Opaque 50
Avatar billede nythjem Nybegynder
31. august 2006 - 13:40 #14
Rent gæt.. :)
Avatar billede kev. Nybegynder
31. august 2006 - 13:48 #15
Hæ hæ, well, overvejede det... men nej, jeg har ikke prøvet
Avatar billede kev. Nybegynder
12. september 2006 - 10:25 #16
Lukker...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester