webForumDet fria alternativet

hjälp att knyta ihop det (bilder)

.NET

7 svar · 564 visningar · startad av CatZ

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

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"))

Medlem sedan mars 200475 inlägg
#2

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

Medlem sedan jan. 20022 440 inlägg
#3

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

Medlem sedan jan. 20022 440 inlägg
#4

Någon som vet hur man sätter width och height på en bild som man hämtar ur databasen och visar?

Medlem sedan apr. 2006135 inlägg
#5

CatZ skrev:

Någon som vet hur man sätter width och height på en bild som man hämtar ur databasen och visar?

Var vänligt och acceptera inte ett svar som slutgiltigt för att sedan försöka fortsätta tråden... har du fler frågor skapa en ny tråd istället!!!

(haha var bara tvungen eftersom att du gnällde på mig om något liknande förra veckan!) :P

// AUXE

Medlem sedan mars 200475 inlägg
#6

en lösning kunde ju vara att spara ner dessa värden ihop med bilden i databasen...

Tack själv för tipset om image's utgång. :)

Medlem sedan jan. 20022 440 inlägg
#7

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.

Postar givetvis det när jag är färdig.

Medlem sedan mars 200475 inlägg
#8
'Kolla om bilden behöver skalas om
                If imgWidth > maxWidth Or imgHeight > maxHeight Then

ändra maxHeight till 100

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