Avatar billede rane Nybegynder
16. august 2003 - 13:16 Der er 12 kommentarer og
2 løsninger

Image width/height ændring

Hejsa,

findes der nogen måde hvorpå man i ASP kan finde width/height på en billedefil (f.eks. http://www.domæne.dk/fil.jpg) - og derefter nedskalerede det billede så det når f.eks. en width på 130px eller height på 80px?

Hvis muligt, skulle det gerne kunne lade sig gøre uden brug af diverse specielle komponenter, som normal ikke er installeret på webhotelservere :)

Det skal bruges til forside nyheder, hvor man kan indsætte/linke til et billede (til hver nyhed) - og det må jo helst ikke være bredere end f.eks. 130px osv.
Avatar billede fun22 Nybegynder
16. august 2003 - 13:26 #1
det gør du da bare ved

<img scr="<%rs("img")%>" width=130px height=80px>

Så viser den billedet i en størrelse ligemeget hvor stort/lille det normalt er.
Avatar billede rane Nybegynder
16. august 2003 - 13:34 #2
Ok skulle måske have forklaret yderligere :)

Hvis man gør det på den måde, så kan billedet blive væsentligt forringet/forvrænget mht. størrelsesforhold.

Dvs. hvis man kunne finde billedets oprindelige width/height - f.eks. width=520 og height=400 - så kunne man udregne det således:

520/130 (max width tilladt på siden) = 4
400/4 = 100

Så width = 130 og height = 100 - og så er der ingen forvrængning på det nedskalerede billede.
Avatar billede keysersoze Ekspert
16. august 2003 - 13:35 #3
hvis selve skaleringen skal foregå idet billedet bliver hentet eller idet billedet uploades, så vil jeg nok foreslå at bruge ASPimage.

Med det genereres et billede du helt kan kontrolere - fx bestemme bredden og så udregne højden og du kan bestemme kvalitet m.m.
Avatar billede oneskarvonly Nybegynder
16. august 2003 - 13:40 #4
pictSize = ReadImg(path) 
X = (CSng(PictSize(0)))
Y = (CSng(PictSize(1)))
Avatar billede rane Nybegynder
16. august 2003 - 13:42 #5
Det gør ikke noget hvis asp-siden skal hente hele den fulde filstørrelse,og så derefter bare skalere det ned. Regner ikke med, der linkes til så store billeder, at det vil gå ud over performancen.

Men hvis det er muligt - kan man ikke finde width/height på et billede uden at bruge specielle komponenter?  Og hvis ja...hvordan? Eksempel modtages med glæde :)
Avatar billede rane Nybegynder
16. august 2003 - 13:43 #6
Oh...thats it??  Prøver lige at eksperimentere med det.
Avatar billede rane Nybegynder
16. august 2003 - 14:02 #7
Hm, der mangler da hele ReadImg funktionen - så det kan jeg ikke umiddelbart bruge til noget :(
Avatar billede oneskarvonly Nybegynder
16. august 2003 - 14:04 #8
<%

'Funktioner til at læse headere i grafik filerne: JPEG, PNG, GIF, BMP og WMF
Dim Size

Function AscAt(s, n)
  AscAt = Asc(Mid(s, n, 1))
End Function

Function HexAt(s, n)
  Dim lsH
  lsH = Hex(AscAt(s, n))
  If Len(lsH) <> 2 Then lsH = "0" & lsH
  HexAt = lsH
End Function

Function isJPG(filen)
  If inStr(uCase(filen), ".JPG") <> 0 Or inStr(uCase(filen), ".JPEG") <> 0 Then
    isJPG = true
  Else
    isJPG = false
  End If
End Function

Function isPNG(filen)
  If inStr(uCase(filen), ".PNG") <> 0 Then
    isPNG = true
  Else
    isPNG = false
  End If
End Function

Function isGIF(filen)
  If inStr(uCase(filen), ".GIF") <> 0 Then
    isGIF = true
  Else
    isGIF = false
  End If
End Function

Function isBMP(filen)
  If inStr(uCase(filen), ".BMP") <> 0 Then
    isBMP = true
  Else
    isBMP = false
  End If
End Function

Function isWMF(filen)
  If inStr(uCase(filen), ".WMF") <> 0 Then
    isWMF = true
  Else
    isWMF = false
  End If
End Function

Function isWebImg(f)
  If isGIF(f) Or isJPG(f) Or isPNG(f) Or isBMP(f) Or isWMF(f) Then
    isWebImg = true
  Else
    isWebImg = true
  End If
End Function

Function ReadImg(filen)
  If isGIF(filen) Then
    ReadImg = ReadGIF(filen)
  Else
    If isJPG(filen) Then
      ReadImg = ReadJPG(filen)
    Else
      If isPNG(filen) Then
        ReadImg = ReadPNG(filen)
      Else
        If isBMP(filen) Then
          ReadImg = ReadPNG(filen)
        Else
          If isWMF(filen) Then
            ReadImg = ReadWMF(filen)
          Else
            ReadImg = Array(0,0)
          End If
        End If
      End If
    End If
  End If
End Function

Sub Rep(s)
  Response.Write s & "<BR>"
End Sub

Function ReadJPG(filen)
  Dim fso, ts, s, HW, ns, n, ok
  HW = Array("","")
  Set fso = CreateObject("Scripting.FileSystemObject")
  Set ts = fso.OpenTextFile(filen, 1)
  ts.Skip(2)
  ns = ts.Read(2)
  Do While Not (ns = "ÿÀ" Or ns = "ÿÂ")
    ns = ts.Read(2)
    n = HexToDec(HexAt(ns,1) & HexAt(ns,2))
    n = n - 2
    ts.Skip(n)
    ns = ts.Read(2)
  Loop
  ts.Skip(3)
  s = ts.Read(4)
  HW(0) = HexToDec(HexAt(s,3) & HexAt(s,4))
  HW(1) = HexToDec(HexAt(s,1) & HexAt(s,2))
  ts.Close
  Set ts = Nothing
  ReadJPG = HW
End Function

Function ReadPNG(filen)
  Dim fso, ts, s, HW, nbytes
  HW = Array("","")
  Set fso = CreateObject("Scripting.FileSystemObject")
  Set ts = fso.OpenTextFile(Server.MapPath("/" & filen), 1)
  s = Right(ts.Read(24), 8)
  HW(0) = HexToDec(HexAt(s,3) & HexAt(s,4))
  HW(1) = HexToDec(HexAt(s,7) & HexAt(s,8))
  ts.Close
  ReadPNG = HW
End Function

Function ReadGIF(filen)
  Dim fso, ts, s, HW, nbytes
  HW = Array("","")
  Set fso = CreateObject("Scripting.FileSystemObject")
  Set ts = fso.OpenTextFile(Server.MapPath("/" & filen), 1)
  ts.Skip(6)
  s = ts.Read(4)
  HW(0) = HexToDec(HexAt(s,2) & HexAt(s,1))
  HW(1) = HexToDec(HexAt(s,4) & HexAt(s,3))
  ts.Close
  ReadGIF = HW
End Function

Function ReadWMF(filen)
  Dim fso, ts, s, HW, nbytes
  HW = Array("","")
  Set fso = CreateObject("Scripting.FileSystemObject")
  Set ts = fso.OpenTextFile(Server.MapPath("/" & filen), 1)
  s = Right(ts.Read(14), 4)
  HW(0) = HexToDec(HexAt(s,2) & HexAt(s,1))
  HW(1) = HexToDec(HexAt(s,4) & HexAt(s,3))
  ts.Close
  ReadWMF = HW
End Function

Function ReadBMP(filen)
  Dim fso, ts, s, HW, nbytes
  HW = Array("","")
  Set fso = CreateObject("Scripting.FileSystemObject")
  Set ts = fso.OpenTextFile(Server.MapPath("/" & filen), 1)
  s = Right(ts.Read(24), 8)
  HW(0) = HexToDec(HexAt(s,4) & HexAt(s,3))
  HW(1) = HexToDec(HexAt(s,8) & HexAt(s,7))
  ts.Close
  ReadBMP = HW
End Function

Function isDigit(c)
  If inStr("0123456789", c) <> 0 Then
    isDigit = true
  Else
    isDigit = false
  End If
End Function

Function isHex(c)
  If inStr("0123456789ABCDEFabcdef", c) <> 0 Then
    isHex = true
  Else
    ishex = false
  End If
End Function

Function HexToDec(cadhex)
  Dim n, i, ch, decimal
  decimal = 0
  n = Len(cadhex)
  For i=1 To n
    ch = Mid(cadhex, i, 1)
    If isHex(ch) Then
      decimal = decimal * 16
      If isDigit(ch) Then
        decimal = decimal + ch
      Else
        decimal = decimal + Asc(uCase(ch)) - Asc("A") + 10
      End If
    Else
      HexToDec = -1
    End If
  Next
  HexToDec = decimal
End Function
%>
Avatar billede rane Nybegynder
16. august 2003 - 14:10 #9
Ok det virker vist ikke lokalt i mit http://localhost/  bibliotek - browseren loader og loader bare og der sker ingenting :(
Avatar billede oneskarvonly Nybegynder
16. august 2003 - 14:11 #10
Hvordan har du defineret PATH ?
Avatar billede rane Nybegynder
16. august 2003 - 16:12 #11
som "images/test.gif"
Avatar billede oneskarvonly Nybegynder
16. august 2003 - 16:19 #12
Jeg henter f.eks. billedet´s filnavn via en db:

path=Server.Mappath(".")&"\\images\\"& folder &"\\" & Recordset1.Fields.Item("billed").Value

og det virker fint...
Avatar billede rane Nybegynder
16. august 2003 - 16:23 #13
hm...har godt nok kun et tekstfelt i db, hvor man eksempelvis skriver:

www.domæne.dk/test.gif

eller evt. bare

graphics/test.gif

Kan være den bare har problemer med at køre lokalt - men kan desværre først teste det online i næste uge engang
Avatar billede clscableguy Praktikant
21. januar 2004 - 08:18 #14
prøv at rette funktionen der hedder ReadGIF(filen) til dette her:

Function ReadGIF(filen)
  Dim fso, ts, s, HW, nbytes
  HW = Array("","")
  Set fso = CreateObject("Scripting.FileSystemObject")
  Set ts = fso.OpenTextFile(filen, 1)
  ts.Skip(6)
  s = ts.Read(4)
  HW(0) = HexToDec(HexAt(s,2) & HexAt(s,1))
  HW(1) = HexToDec(HexAt(s,4) & HexAt(s,3))
  ts.Close
  ReadGIF = HW(0) & "*" & HW(1)
End Function
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