webForumDet fria alternativet

Beskära bild till thumbnails ASPJPEG (alltid samma storlek)

ASP

7 svar · 799 visningar · startad av SteveP

Medlem sedan mars 2003772 inlägg
Frågan#1

Jag använder mig av aspupload och aspjpeg för att ladda upp en bild och skapa en kopia som sen blir en thumbnail. Detta fungerar fint, men jag skulle vilja ha samma storlek på thumbnailsen oavsett format på bilden.

Som jag har det nu så har jag gjort så att den max kan vara 90px hög och max 120px bred och det funkar bra, men problemet är om jag laddar upp en bild som är otroligt smal men hög så blir den 90px hög och på bredden blir den runt 65px.

Jag skulle alltså vilja att thumbnailen ska bli 120x90 oavsett formatet innan, men jag vill också att den ska bibehålla proportionerna, så om jag hårdkodar length till 120 och height till 90 så blir thumbnailen ihoptryckt eller utdragen.

Lösningen är då istället att ASPJPEG på nåt sätt kan beskära bilden så den blir 90x120 men bibehåller proportionerna. En avlång bild skulle alltså då beskäras på mitten typ och thumbnailen skulle bara kanske bara bestå av halva bilden för att bibehålla proportionerna.

Nån som vet hur man gör detta med ASPJPEG? Det verkar finnas en funktion som heter crop, men hittar inte så mycket information om den i dokumentationen.

Medlem sedan mars 2003772 inlägg
#2
' Crop 20 pixels from left, 30 from top.
' Make image size 60 by 40.
Jpeg.Crop 20, 30, 80, 70

Detta är ju okej om man vet exakt hur stor bilden är, men storleken på bilden jag laddar upp varierar ju.
Jag vill att den ska läsa av bildstorleken sen croppa så den blir 120x90 varje gång.

Medlem sedan sep. 2006867 inlägg
#3

http://www.aspjpeg.com/manual_02.html

Resiza bilden först, sen croppar du bilden till önskad storlek.
Du kan hela tiden laborera med Jpeg.Width eller Jpeg.Height för att kolla storleken och räkna ut hur mycket du behöver croppa eller om du över huvud taget ska croppa...

Medlem sedan mars 2003772 inlägg
#4

Det är just funktionen att kolla hur stor bilden är och sen räkna ut hur mycket som behöver croppas som jag är ute efter.

Medlem sedan sep. 2006867 inlägg
#5

Såhär kollar du hur stor en bild är:

' Create instance of AspJpeg
Set Jpeg = Server.CreateObject("Persits.Jpeg")

' Open source image
Jpeg.Open "c:\path\myimage.jpg"

H = Jpeg.OriginalHeight
W = Jpeg.OriginalWidth

Sedan kan du använda dessa variabler som du vill.

Det finns (tror jag) inga färdiga funktioner som gör exakt det du vill men det finns ju bra verktyg i överflöd som du med lite micklande kan bygga egna funktioner av.

Medlem sedan mars 2003772 inlägg
#6

Såhär blev det:

jpeg.PreserveAspectRatio = True

    L = 90
    W = 120

	If Jpeg.OriginalWidth > Jpeg.OriginalHeight Then
	  Jpeg.Height = L
	Else
	  Jpeg.Width = W
	End If

	xCropWidth = 120
	xCropHeight = 90

	xOffset = int((Jpeg.Width-xCropWidth)/2)
    yOffset = int((Jpeg.Height-xCropHeight)/2)

    Jpeg.Crop xOffset, yOffset, Jpeg.Width-xOffset, Jpeg.Height-yOffset

Dock blev bilden i vissa enstaka fall 121 pixlar bred eftersom den rundar uppåt.
Vet inte riktigt hur jag ska få den att inte runda till 121 när den är 120,5, 120,6, 120,7, 120,8, 120,9 pixlar bred.

Medlem sedan sep. 2006867 inlägg
#7

Det löser du med en hemsnickrad Floor-funktion. Ett exempel på en sådan hittar du på

http://www.aspemporium.com/codelib.aspx?pid=112&cid=14

MVH HB

Medlem sedan sep. 2003448 inlägg
#8
Set jpeg = Server.CreateObject("Persits.Jpeg")
Set jpeg2 = Server.CreateObject("Persits.Jpeg")

	
	if request("w") <> "" then w = request("w") else w = 180
	
	img_width = w - (w * 0.08) 
	img_height = (w/1.33) - (w * 0.08) 
		
		if jpeg.OriginalWidth > jpeg.OriginalHeight then
			jpeg.Width = img_width
			jpeg.Height = jpeg.OriginalHeight * jpeg.Width / jpeg.OriginalWidth
		else
			jpeg.Height = img_height
			jpeg.Width = jpeg.OriginalWidth * jpeg.Height / jpeg.OriginalHeight
		end if

	Jpeg2.New (w), (w/1.33), &HFFFFFF
	Jpeg2.Canvas.DrawImage ((Jpeg2.width-jpeg.width)/2), ((jpeg2.height-jpeg.height)/2), jpeg

	jpeg2.quality = 95
	jpeg2.SendBinary
	
Jpeg.Close : Set Jpeg = Nothing
Jpeg2.Close : Set Jpeg = Nothing

Gjorde denna för länge sedan men det verkar funka bra iallafall :)

249 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
121 ms — deklarationer (db)
0 ms — hämta statistik (cache)
124 ms — hämta tråd, inlägg och bilagor (db)
122 ms — ändringar (db)