webForumDet fria alternativet

Ändra storlek på bild på med korrekt format?

.NET

6 svar · 434 visningar · startad av Claysson

Medlem sedan jan. 200454 inlägg
Frågan#1

Hallå,

jag sitter med ett eget uppladdningsscript där även bilder laddas upp. Detta hanterar jag utan problem. Inga problem att ändra storlek osv.

Men jag har ett problem med formatet. Om en bild har 4:3 formatet så blir det en bra bild med rätt propertioner. Men om bilden har annat format (bredbild) så blir det fel propertioner.

Alltså jag vill att bredden skall vara 300px på ALLA bilder oavsett längden (man kan bara ladda upp bilder med bredd över 300 =)

ex. med två bilder.

1. bilden 600*800px blir 300*400px
2. bilden 600*1100px SKALL bli 300*550px <- problemet är alltså hur den skall veta i vilket format denna bilden skall förminskas i?

Någon som förstår mig?

Obs. Jag har sökt massor!

Medlem sedan mars 200490 inlägg
#2

Jag höll på med den här igår :)
du får ändra 100 till 300 antar jag..

du får skriva om den så att den passar exakt det du ska ha den till, men nånting borde du kunna få ut av den..

som den är nu så skalar den om bilder som är större än 100px på någon ledd.
är bilden 4:3 så blir den 100*x och om den är 3:4 så blir den x*100

dim fullSizeImg As System.Drawing.Image
		
fullSizeImg = System.Drawing.Image.FromFile(imageFullPathFile)
		
'Skapa tumnaglar
Dim TIA As System.Drawing.Image.GetThumbnailImageAbort
Dim newImg As New Bitmap(fullSizeImg)
Dim NewHeight As Integer = 0
Dim NewWidth As Integer = 0
Dim NewRatio As Decimal = 0
			
fullSizeImg.Dispose()
fullSizeImg = newImg
			
'undersök om bilden behöver skalas ned
If fullSizeImg.Height > 100 OR fullSizeImg.Width > 100 Then
If fullSizeImg.Height < fullSizeImg.Width Then
'4:3 räkna ut höjd-bredd-förhållande
NewRatio = fullSizeImg.Width / fullSizeImg.Height
'räkna ut en ny höjd
NewHeight = Decimal.Round((100 / NewRatio), 0 ) 'runda av till heltal
fullSizeImg = fullSizeImg.GetThumbnailImage(100, NewHeight, TIA, IntPtr.Zero)
Else
'3:4 räkna ut höjd-bredd-förhållande
NewRatio = fullSizeImg.Height / fullSizeImg.Width
'räkna ut en ny bredd
NewWidth = Decimal.Round((100 / NewRatio), 0 ) 'runda av till heltal
fullSizeImg = fullSizeImg.GetThumbnailImage(NewWidth, 100, TIA, IntPtr.Zero)
End If
Else
fullSizeImg = fullSizeImg.GetThumbnailImage(fullSizeImg.Width, fullSizeImg.Height, TIA, IntPtr.Zero)
End If
			
Dim eps As EncoderParameters = New EncoderParameters(1)
eps.Param(0) = New EncoderParameter(System.Drawing.Imaging.Encoder.Quality, 40)
Dim ici As ImageCodecInfo = GetEncoderInfo("image/jpeg")
dim newFullPath as string = Server.MapPath("databases/artikelbilder/") & "tumme_" & fn
fullSizeImg.Save(newFullPath, ici, eps)
		
fullSizeImg.Dispose()
Medlem sedan jan. 200454 inlägg
#3

Härligt! :D

Då har jag hela kvällen idag o konvertera om allt till C# ;)

Tack Cale

Medlem sedan mars 200490 inlägg
#4

hehe ok :D
jag vet hur det är när man ser en bra lösning men i fel språk.

Men som sagt, själva pixeluträkningen borde ju vara universell.. nästan :P

Medlem sedan jan. 200454 inlägg
#5

Jo jag tänkte juh att jag bara behövde uträkningen iof.. :/

Medlem sedan mars 200490 inlägg
#6

vill du kanske att jag ska förenkla så att det inte är en massa "onödigt" då?

..dum fråga kanske

Medlem sedan jan. 200454 inlägg
#7

Nejdå, jag tror jag får kläm på det ändå!

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