Jag har lite olika funktioner som jag använder för att spara en logo i en sql databas. Jag postar alla funktionerna så som de ser ut just nu
Public Sub LogoStream(ByVal CompanyID As Integer)
' Get all the info from the form
Dim imgStream As IO.MemoryStream = UploadFile.PostedFile.InputStream
Dim imgLen As Integer = UploadFile.PostedFile.ContentLength
Dim imgUploadedName As String = UploadFile.PostedFile.FileName
Dim imgBinaryData(imgLen) As Byte
Dim imgContentType As String = UploadFile.PostedFile.ContentType
' Call function to get file type
GetImageFormat(imgUploadedName)
If Me.lblImage.Text = "False" Then
Exit Sub
End If
' Make sure it is an image
imgStream.Read(imgBinaryData, 0, imgLen)
' Call the function to add the picture to our database
LogoToDb(imgBinaryData, imgContentType, CompanyID)
End Sub
Det där fungerar toppen, men jag vill ju kolla storleken osv innan jag laddar upp bilden/logon. Måste ju anpassa logon innan den laddas in i databasen och anledn ingen till detta är att annars blir pdf ordern kanske lite väl stor för att skicka via epost. Den som jag använder just nu är 12MB istället för 40kb därför att jag har en gigantisk bild som logo.
Hur ska jag spinna vidare på det här för att ändra på storleken? Jag hittade lite vettig kod men då vill de ha själva filen uppladdad antar jag... skulle vilja låna koden på http://www.devx.com/vb2themax/Tip/19660 och få att fungera på något vis...
Ja just det, finns det något sätt att läsa in höjd och vidd från blogfältet? Som det är nu hämtar jag bilden med en SqlDataReader och skriver den till sidan med Response.BinaryWrite(SqlDataReader.Item("Logo"))
Jag har använt följande kod för att omforma en uppladdad fil och sedan spara den igen i en databas.
'Skapa bild av uppladdningsströmmen
Dim imgStream As Stream = FileUpload1.PostedFile.InputStream()
Dim currentImage As System.Drawing.Image = System.Drawing.Image.FromStream(imgStream)
'hämta höjd och bredd
Dim imgHeight As Integer = currentImage.Height
Dim imgWidth As Integer = currentImage.Width
'Kolla om bilden behöver skalas om
If imgWidth > maxWidth Or imgHeight > maxHeight Then
Dim deltaWidth As Integer = imgWidth - maxWidth
Dim deltaHeight As Integer = imgHeight - maxHeight
Dim scaleFactor As Double
If deltaHeight > deltaWidth Then
scaleFactor = maxHeight / imgHeight
Else
scaleFactor = maxWidth / imgWidth
End If
imgWidth *= scaleFactor
imgHeight *= scaleFactor
End If
'Skapa ny bild med rätt dimensioner
Dim imgBin As Byte() = createImage(imgStream, imgWidth, imgHeight)
imgStream.Dispose()
currentImage.Dispose()
createimage ser ut så här
Private Function createImage(ByVal ImageStream As Stream, _
ByVal tWidth As Double, ByVal tHeight As Double) As Byte()
Dim g As System.Drawing.Image = System.Drawing.Image.FromStream(ImageStream)
Dim imgOutput As New Bitmap(g, tWidth, tHeight)
Dim imgStream As New MemoryStream()
Dim thisFormat = g.RawFormat
imgOutput.Save(imgStream, thisFormat)
Dim imgbin(imgStream.Length) As Byte
imgStream.Position = 0
Dim n As Int32 = imgStream.Read(imgbin, 0, imgbin.Length)
g.Dispose()
imgOutput.Dispose()
Return imgbin
End Function
sedan är det bara att spara imgBin in i databsaen som Image. Hoppas att det hjälpte
Hyzac! Så enkelt att förstå! Så enkelt att implementera! Så vackert! Tack ska du ha, jag tar för givet att contenttype blir "image/bmp" ? Det verkar fungera iaf :)
Jag sparar som varbinary(max) och använder contenttype istället. image kommer ju fasas ut. I nästa version av SQL Server kommer inte image finnas längre om man ska tro microsoft.
Jag börjar bli för gammal för att hålla på och lära om hela tiden så jag försöker ligga ett par steg före. Duktig vovve? :e
Tack ska du själv ha för lättbegriplig kod! :) Sitter precis och pillar på hur jag ska se till att höjden på bilden aldrig blir mer än 100pixlar, börjar närma mig en lösning.