Jeg har idag et system, hvor brugerne kan uploade billeder, men de må ikke fylde mere end 50 kb. Det giver ofte problemer, da de meget ofte ikke kan finde ud af at få billedet under 50 kb. Jeg vil derfor gerne have det sådan, at brugerne kan uploade deres ikke-redigerede billeder, hvorefter de inden de bliver gemt bliver resized til størrelsen 300 x 200. Jeg har taget udgangspunkt i denne kode:
<% function resize(sti,navn,nyX) Set objImg = Server.CreateObject("AspImage.Image") objImg.PadSize = 0 objImg.LoadImage Server.MapPath(sti & navn) objImg.GetImageFileSize Server.MapPath(sti & navn), X, Y
ResizedX = nyX objImg.MaxX = X objImg.MaxY = Y
if X > ResizedX then ResizedY = (ResizedX / objImg.MaxX) * objImg.MaxY objImg.ResizeR ResizedX, ResizedY objImg.FileName = (Server.MapPath(sti & navn)) objImg.SaveImage end if
Set objImg = Nothing end function
If Request("s") = "upload" Then
Dim mySmartUpload Dim file1 Dim intCount intCount=0
Set mySmartUpload = Server.CreateObject("aspSmartUpload.SmartUpload")
mySmartUpload.Upload
For each file1 In mySmartUpload.Files
If not file1.IsMissing Then
file1.SaveAs("/upload/" & file1.FileName)
Response.Write("FileName = " & file1.FileName & "<br>") call resize("upload/",file1.FileName,140) Response.Write("<img src=""upload/" & file1.FileName & """ title=""Your uploaded image""><br>") intCount = intCount + 1 End If Next
som også fungerer godt, men har desværre ikke rigtig held med at rette i forskellige oplysninger. Jeg vil gerne have billederne i størrelsen 300 x 200, men går også fint med den eksisterende kode, men ikke, hvis jeg begynder at ændre på den sti, hvor billedet skal gemmes. Har ændret:
file1.SaveAs("/upload/" & file1.FileName) til file1.SaveAs("/upload/" & Id & "/1.JPG") (Id = 1 er indsat tidligere)
hvilket også gemmer billedet korrekt, men det er nu IKKE blevet resized???
Ved ikke helt om det hjælper, men jeg bruger følgende kode til at uploade og resize billeder. Måske det kan hjælpe dig med dit resize problem:
Private Sub myUploadCode(ByVal sender As Object, ByVal e As EventArgs) Dim strFileName As String Dim strFileTemp As String strFileTemp = upload_file.PostedFile.FileName.Substring(upload_file.PostedFile.FileName.LastIndexOf(".") + 1) Dim MaxSizeWidth As Integer = 300 Dim MaxSizeHeight As Integer = 200 Dim image As System.Drawing.Image = New System.Drawing.Bitmap(upload_file.PostedFile.InputStream) Dim bOrg As System.Drawing.Bitmap = CType(image, System.Drawing.Bitmap) Dim format As System.Drawing.Imaging.ImageFormat = image.RawFormat If image.Width > MaxSizeWidth OrElse image.Height > MaxSizeHeight Then Dim b As Bitmap = Resize(bOrg, MaxSizeHeight, MaxSizeWidth) b.Save(Server.MapPath("picupload/" + strFileName), format) Else upload_file.PostedFile.SaveAs(Server.MapPath("picupload/" + strFileName)) End If End Sub
Private Shared Function Resize(ByVal b As Bitmap, ByVal MaxHeight As Integer, ByVal MaxWidth As Integer) As Bitmap Dim nWidth As Integer = b.Width Dim nHeight As Integer = b.Height If nHeight > MaxHeight Then nWidth = CType(((CType(b.Width, Double) / CType(b.Height, Double)) * CType(MaxHeight, Double)), Integer) nHeight = MaxHeight End If If nWidth > MaxWidth Then nWidth = MaxWidth nHeight = CType(((CType(b.Height, Double) / CType(b.Width, Double)) * CType(MaxWidth, Double)), Integer) End If Dim bTemp As Bitmap = CType(b.Clone, Bitmap) b = New Bitmap(nWidth, nHeight, System.Drawing.Imaging.PixelFormat.Format24bppRgb) Dim nXFactor As Double = CType(bTemp.Width, Double) / CType(nWidth, Double) Dim nYFactor As Double = CType(bTemp.Height, Double) / CType(nHeight, Double) Dim x As Integer = 0 While x < b.Width Dim y As Integer = 0 While y < b.Height b.SetPixel(x, y, bTemp.GetPixel(CType((Math.Floor(x * nXFactor)), Integer), CType((Math.Floor(y * nYFactor)), Integer))) System.Threading.Interlocked.Increment(y) End While System.Threading.Interlocked.Increment(x) End While Return b End Function
Jeg har tidligere lavet kode der omdøber et billede ved upload.. Du kan let integrere det i din eksisterende kode:
Sub btnUploadTheFile_Click(ByVal Source As Object, ByVal evArgs As EventArgs) Dim strFileNameOnServer As String = txtServername.Value Dim strBaseLocation As String = Server.MapPath("../galleri/") If "" = strFileNameOnServer Then txtOutput.InnerHtml = "Fejl - Der skal angives et navn." Return End If If Not (Nothing = uplTheFile.PostedFile) Then Try uplTheFile.PostedFile.SaveAs(strBaseLocation + strFileNameOnServer + ".jpg") txtOutput.InnerHtml = "Filen <b>" + strBaseLocation + strFileNameOnServer + "</b> er blevet uploadet" Catch e As Exception txtOutput.InnerHtml = "Fejl ved lagring af <b>" + strBaseLocation + strFileNameOnServer + "</b><br>" + e.ToString End Try End If End Sub
Virkelig tak for forslagene, men jeg kan ikke finde hoved eller hale :-) Jeg afventer lige, om andre har forslag til min eksisterende kode, som jeg har arbejdet lidt med
Det betyder dog ikke noget, hvor linien file1.SaveAs("/upload/" & file1.FileName) er placeret, men tidligere har jeg ikke fået rettet "call resize .." når jeg rettede "file1...".
Mit umiddelbare eneste problem er nu, at når jeg forsøger at ændre på filens navn, så går det galt. Hvis jeg f.eks. bruger disse sætninger (Id er tidligere defineret som = 1):
file1.SaveAs("/upload/" & Id & "/" & Id) call resize("/upload/" & Id & "/" , Id , 300)
gemmer den godt nok filen som 1, men den resizer ikke?????????????
Hvordan kan jeg ændre filnavnet og den stadig resizer?
Det kan nemt være mig, som gør et eller andet forkert :-) Kan heller ikke lige se, hvordan jeg definerer, at billedet ikke skal gemmes med dens oprindelige filnavn, men f.eks. 1.JPG og i mappen, som svarer til Id´nummeret, f.eks. 1??
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.