Jag undrar om det finns något alternativ till de skitdyra komponenter som bland annat ASPSmart säljer för att få en bild i rätt storlek osv på internet. Det är ju en blandning av asp och javascript, men borde man inte kunna använda javascript för att ta reda på x- och y-punkterna på bilden för att sedan spara de i en databas och sen hämta dem så att bilden visas med rätt proportioner och storlek...kanske lite rörigt, men i alla fall samma princip som ASPSmartImage eller vad det heter, fast utan komponenten alltså! Här är en liten snutt som tar hand om själva sparningen och en resize av en bild ... Min erfarenhet (inget påpekande angående scriptningen, mer allmänt) är att ett javascript som "resizear" en bild bör bara jobba med JPG-filer, dvs fotografiskt material. Ren grafik i GIF och PNG format får stor kvalitetsförlust om den skalas nedåt på detta sätt.Skär ut bild med javascript
Någon som vet?
//hermanSv: Skär ut bild med javascript
det du måste lägga till är att ha en sp som sparar bilden, vill du ha den så kan du maila mig
Sub SaveImage(ByVal UpFile As System.Web.HttpPostedFile)
Dim intFileLength As Integer = UpFile.ContentLength
If intFileLength = 0 Then
'Ingen fil
Exit Sub
End If
Dim stmImage As Stream
If UpFile.ContentType.ToLower = "image/jpeg" Then
stmImage = UpFile.InputStream
Else
'Om det inte var en jpeg, konvertera filen
stmImage = ConvertImage(UpFile.InputStream, enumImageTypes.Jpeg, 100)
intFileLength = stmImage.Length
stmImage.Position = 0
End If
Dim arrFileByteArray(intFileLength) As Byte
stmImage.Read(arrFileByteArray, 0, intFileLength)
Dim arrParams(2) As Object
'Storleken på bilden ska vara 325 bred
arrParams(0) = ResizeImage(arrFileByteArray, 325)
arrParams(1) = "image/jpeg"
arrParams(2) = ResizeImage(arrFileByteArray, 325).Length 'Inte så effektivt
Dim objUtils As New HABIUtilities()
objUtils.ExecuteNonQuery("spInsertImage", arrParams)
objUtils = Nothing
End Sub
Public Function ResizeImage(ByVal bytImage() As Byte, ByVal Width As Integer) _
As Byte()
Dim imgOrgImage As System.Drawing.Image = System.Drawing.Image.FromStream(New System.IO.MemoryStream(bytImage))
If imgOrgImage.Width <> Width Then
Dim imgNewImage As System.Drawing.Image = New Bitmap(imgOrgImage, Width, Math.Floor(((imgOrgImage.Height / imgOrgImage.Width) * Width)))
Dim _stmImage As New MemoryStream()
imgNewImage.Save(_stmImage, ImageFormat.Jpeg)
_stmImage.Position = 0
Dim _bytImage(_stmImage.Length) As Byte
_stmImage.Read(_bytImage, 0, _stmImage.Length)
Return _bytImage
Else
Return bytImage
End If
End Function
Visa bilden funktion
Function GetImage(ByVal imageID As Integer, ByVal width As Integer) As Image
Dim objUtils As New HABIUtilities()
Dim drImage As Data.SqlClient.SqlDataReader
drImage = objUtils.GetDataReader("spGetStockImage", imageID)
objUtils = Nothing
Dim retImage As Image
If drImage.Read() Then
retImage.ContentType = "image/jpeg"
retImage.Length = ResizeImage(CType(drImage("Image"), Byte()), width).Length
retImage.imageBytes = ResizeImage(CType(drImage("Image"), Byte()), width)
Return retImage
drImage = Nothing
Else
Return Nothing
End If
End Function
Så här kallar du på bilden i en ASP.net sida
If Request.Params.Get("ImageID") <> "" Then
Dim objImage As New ImageControler()
Dim dtImage As ImageControler.Image
If Request.Params.Get("width") <> "" Then
dtImage = objImage.GetImage(Request("ImageID"), Request("width"))
Else
dtImage = objImage.GetImage(Request("ImageID"))
End If
Response.ContentType = dtImage.ContentType
Response.OutputStream.Write(dtImage.imageBytes, 0, dtImage.Length)
Response.End()
dtImage = Nothing
objImage = Nothing
Else
Response.Write("No ImageID supplied......use ImageID=xx")
End If
Maila om det är oklart och du vill ha mer supportSv: Skär ut bild med javascript
//Kris