n1
Nybegynder
22. januar 2004 - 14:52
Der er
26 kommentarer og 2 løsninger
upload og skalering af billeder
jeg skal bruge et script der kan uploade so kopier af et billed til en mappe, en hvor det bliver skaleret til en maks størrelse på 800 x 600 og en hvor det maks må være 100x100. jeg har fundet et script der måske kan bruges:
http://www.zitech.net/ZNSUP/aspx/skalering/ der må også gerne sættes begrænsning på størrelsen fx 100Kb og de må gerne læggei seperate mapper.
kan det lade sig gøre?
Annonceindlæg fra Barco
22. januar 2004 - 15:01
#1
ja ;-)
n1
Nybegynder
22. januar 2004 - 15:04
#2
er der nogen der kan lave et sådan script til mig???
22. januar 2004 - 15:15
#3
Jeg kan godt kigge på det i løbet af weekenden. Hvad koder du i?
n1
Nybegynder
22. januar 2004 - 15:17
#4
jeg kan finde ud af lidt asp, men jeg har også adgang til asp.net
22. januar 2004 - 15:18
#5
måske du kan bruge dette som inspiration? private void SavePicture(byte[] data) { string baseDir = Configuration.BaseDir; string pictureDir = Configuration.PictureDir; Stream s = new MemoryStream(data); Bitmap b = new Bitmap(s); bool ligger = true; if (b.Height > b.Width) { ligger = false; } Bitmap small; if (ligger) { small = ImageUtil.Resize(b, 100, 75, false); } else { small = ImageUtil.Resize(b, 75, 100, false); } small.Save(pictureDir +"\\"+ this.Id +"-small.jpg", System.Drawing.Imaging.ImageFormat.Jpeg); Bitmap big; if (ligger) { big = ImageUtil.Resize(b, 640, 480, false); } else { big = ImageUtil.Resize(b, 480, 640, false); } Bitmap logo = new Bitmap(System.Drawing.Image.FromFile(baseDir +"\\gfx\\pic-view-logo.gif")); Graphics g = Graphics.FromImage(big); if (ligger) { g.FillRectangle(Brushes.Black, 439, 407, 196, 68); g.DrawImageUnscaled(logo, 439, 407); } else { g.FillRectangle(Brushes.Black, 279, 567, 196, 68); g.DrawImageUnscaled(logo, 279, 567); } big.Save(pictureDir +"\\"+ this.Id +"-big.jpg", System.Drawing.Imaging.ImageFormat.Jpeg); b.Dispose(); small.Dispose(); big.Dispose(); logo.Dispose(); } public class ImageUtil { public static Bitmap Resize(Bitmap b, int nWidth, int nHeight, bool bBilinear) { Bitmap bTemp = (Bitmap)b.Clone(); b = new Bitmap(nWidth, nHeight, bTemp.PixelFormat); double nXFactor = (double)bTemp.Width/(double)nWidth; double nYFactor = (double)bTemp.Height/(double)nHeight; if (bBilinear) { double fraction_x, fraction_y, one_minus_x, one_minus_y; int ceil_x, ceil_y, floor_x, floor_y; Color c1 = new Color(); Color c2 = new Color(); Color c3 = new Color(); Color c4 = new Color(); byte red, green, blue; byte b1, b2; for (int x = 0; x < b.Width; ++x) for (int y = 0; y < b.Height; ++y) { // Setup floor_x = (int)Math.Floor(x * nXFactor); floor_y = (int)Math.Floor(y * nYFactor); ceil_x = floor_x + 1; if (ceil_x >= bTemp.Width) ceil_x = floor_x; ceil_y = floor_y + 1; if (ceil_y >= bTemp.Height) ceil_y = floor_y; fraction_x = x * nXFactor - floor_x; fraction_y = y * nYFactor - floor_y; one_minus_x = 1.0 - fraction_x; one_minus_y = 1.0 - fraction_y; c1 = bTemp.GetPixel(floor_x, floor_y); c2 = bTemp.GetPixel(ceil_x, floor_y); c3 = bTemp.GetPixel(floor_x, ceil_y); c4 = bTemp.GetPixel(ceil_x, ceil_y); // Blue b1 = (byte)(one_minus_x * c1.B + fraction_x * c2.B); b2 = (byte)(one_minus_x * c3.B + fraction_x * c4.B); blue = (byte)(one_minus_y * (double)(b1) + fraction_y * (double)(b2)); // Green b1 = (byte)(one_minus_x * c1.G + fraction_x * c2.G); b2 = (byte)(one_minus_x * c3.G + fraction_x * c4.G); green = (byte)(one_minus_y * (double)(b1) + fraction_y * (double)(b2)); // Red b1 = (byte)(one_minus_x * c1.R + fraction_x * c2.R); b2 = (byte)(one_minus_x * c3.R + fraction_x * c4.R); red = (byte)(one_minus_y * (double)(b1) + fraction_y * (double)(b2)); b.SetPixel(x,y, System.Drawing.Color.FromArgb(255, red, green, blue)); } } else { for (int x = 0; x < b.Width; ++x) for (int y = 0; y < b.Height; ++y) b.SetPixel(x, y, bTemp.GetPixel((int)(Math.Floor(x * nXFactor)),(int)(Math.Floor(y * nYFactor)))); } return b; } }
22. januar 2004 - 15:22
#6
OK - jeg troede du ville have det i asp.net når du lagde det i denne gruppe. Hvis du ingen asp.net erfaring har er det måske en lidt for stor mundfuld, men jeg kan stadig godt give det et skud da jeg skal bruge det i en anden sammenhæng.
n1
Nybegynder
22. januar 2004 - 15:24
#7
kan det da laves bedre i asp?
22. januar 2004 - 15:28
#8
det tror jeg ikke
n1
Nybegynder
22. januar 2004 - 15:29
#9
men det kunne være fedt hvis der var nogen der havde et komplet script til dette :-)
22. januar 2004 - 15:39
#10
Her er en mere eller mindre færdig løsning: <%@ Page Language="C#" %> <%@ Import Namespace="System.IO" %> <%@ Import Namespace="System.Drawing" %> <script runat=server> private void myUploadCode(Object sender, EventArgs e) { string strFileName; if(upload_file.PostedFile.FileName.IndexOf("\\") > 0) { strFileName = upload_file.PostedFile.FileName.Substring(upload_file.PostedFile.FileName.LastIndexOf("\\") + 1); } else { strFileName = "ukendt.fil"; } int MaxSize = 100; System.Drawing.Image image = new System.Drawing.Bitmap(upload_file.PostedFile.InputStream); System.Drawing.Bitmap bOrg = (System.Drawing.Bitmap)image; System.Drawing.Imaging.ImageFormat format = image.RawFormat; if(image.Width>MaxSize || image.Height>MaxSize) { Bitmap b = Resize(bOrg,MaxSize,MaxSize); b.Save(Server.MapPath("images/" + strFileName ),format); } else { bOrg.Save(Server.MapPath("images/" + strFileName ),format); } Response.Write("<p>File <b><a href=\"images/" + strFileName + "\">" + strFileName + "</b> has been uploaded</b>"); } private static Bitmap Resize(Bitmap b, int MaxHeight, int MaxWidth) { int nWidth = b.Width; int nHeight = b.Height; if(nHeight>MaxHeight) { nWidth = (int)((((double)b.Width)/((double)b.Height))*((double)MaxHeight)); nHeight = MaxHeight; } if(nWidth>MaxWidth) { nWidth=MaxWidth; nHeight = (int)((((double)b.Height)/((double)b.Width))*((double)MaxWidth)); } Bitmap bTemp = (Bitmap)b.Clone(); b = new Bitmap(nWidth, nHeight, System.Drawing.Imaging.PixelFormat.Format24bppRgb); double nXFactor = (double)bTemp.Width/(double)nWidth; double nYFactor = (double)bTemp.Height/(double)nHeight; for (int x = 0; x < b.Width; ++x) for (int y = 0; y < b.Height; ++y) b.SetPixel(x, y, bTemp.GetPixel((int)(Math.Floor(x * nXFactor)), (int)(Math.Floor(y * nYFactor)))); return b; } </script> <html><body> <form enctype="multipart/form-data" runat="server"> <asp:PlaceHolder id="phEdit" runat="server"> <p>Select image to upload:</p> <input id="upload_file" type="file" runat="server" /><br><br> <asp:button Text="Upload File" onClick="myUploadCode" runat="server" /> </asp:PlaceHolder> </form> </body></html>
n1
Nybegynder
22. januar 2004 - 15:42
#11
fedt, så mangler den bare at lave det store billed :-)
n1
Nybegynder
22. januar 2004 - 15:45
#12
ken det ikke også lave det således at den omdøber filnavnet hvis det allerrede eksisterer i image mappen?
22. januar 2004 - 15:48
#13
kan man lave den så man vælger hvad størelse det skal uploades i og hvordan billedet til at se ud efter upload? (bliver det dårligt)
22. januar 2004 - 15:51
#14
Og sorry, jeg havde ikke set at du ville have originalen også. Du gemmer den med: upload_file.PostedFile.SaveAs(Server.MapPath("images/strFileName")) Det lille billede skal du så nok gemme i fx. "/thumbnails/" i stedet for "images".
22. januar 2004 - 15:51
#15
Du kan jo lave en tekstbox hvor man vælge størrelse, og så sætte 'MaxSize' til denne størrelse.
22. januar 2004 - 16:17
#16
odegaard >>>> Der er ikke noget i det man skal være opmærksom på? Når man har indsat en tekstbox eller drop down box i uploadnings formularen, hvad og med hvad skal erstattes?
22. januar 2004 - 16:17
#17
odegaard >>>> Jeg opretter lige et spørgsmål til dette.
22. januar 2004 - 16:21
#18
Lytter med...
n1
Nybegynder
22. januar 2004 - 16:43
#19
hvordan skal det se ud hvis den også skal kopiere originalen, som makas må fylde 100Kb. så må der også gerne komme en besked hvis filen allerrede eksisterer!
22. januar 2004 - 16:49
#20
Jeg har oprette et spørgsmål med lidt flere point for hjælp til at lave drop down box til at bestemme størelse af billedet ved upload og til at lave så den omdøber filnavnet på billedet og uploader med aspSmartUpload.
http://www.eksperten.dk/spm/455501
22. januar 2004 - 16:49
#21
if(upload_file.PostedFile.ContentLength) > (100*1024)) { [Fil er for stor] } if File.Exist(Server.MapPath("images/strFileName")) { [Fil eksisterer] }
n1
Nybegynder
22. januar 2004 - 16:57
#22
jeg kna ikke helt få det til at virke! kan du ikke prøve at indsætte det i det ovenstående script... tak. og helst med at den også uploader orignal filen hvis den ikke er over 100Kb. så er jeg glad!
22. januar 2004 - 17:03
#23
Hvis du slet ingen erfaring har med ASP.NET, så var det måske en idé først at få det, inden du kaster dig ud i det her? De ting du spørger om nu, er MEGET elementære.
n1
Nybegynder
22. januar 2004 - 17:06
#24
ja... det kunne godt være, men jeg har først lige fået webhotel med asp.net.
n1
Nybegynder
22. januar 2004 - 17:39
#25
jeg kan virkelig ikke få den til at lave to kopier at billedet, kan du ikke sætte scriptet sammen for mig???? plz.....
22. januar 2004 - 21:16
#26
Prøv den her (kræver en undermappe '\images' og en '\thumbs') Tjekker for om det er et billede, om det er under 100kb, og om filen allerede eksisterer. ----------------------upload_image.aspx-------------------- <%@ Page Language="C#" %> <%@ Import Namespace="System.IO" %> <%@ Import Namespace="System.Drawing" %> <script runat=server> private void myUploadCode(Object sender, EventArgs e) { string strFileName; if(upload_file.PostedFile.ContentLength < (100*1024)) { //Er fil over 100kb? if(upload_file.PostedFile.FileName.IndexOf("\\") > 0) { strFileName = upload_file.PostedFile.FileName.Substring(upload_file.PostedFile.FileName.LastIndexOf("\\") + 1); } else { strFileName = "ukendt.fil"; } if(!File.Exists(Server.MapPath("images/" + strFileName))) { int MaxSize = 100; try { System.Drawing.Image image = new System.Drawing.Bitmap(upload_file.PostedFile.InputStream); upload_file.PostedFile.SaveAs(Server.MapPath("images/" + strFileName)); System.Drawing.Bitmap bOrg = (System.Drawing.Bitmap)image; System.Drawing.Imaging.ImageFormat format = image.RawFormat; if(image.Width>MaxSize || image.Height>MaxSize) { Bitmap b = Resize(bOrg,MaxSize,MaxSize); b.Save(Server.MapPath("thumbs/" + strFileName ),format); } else { //Gem original da billede allerede er mindre end 100px upload_file.PostedFile.SaveAs(Server.MapPath("thumbs/" + strFileName)); } Response.Write("<p>File <b><a href=\"images/" + strFileName + "\">" + strFileName + "</b> has been uploaded</b>"); Response.Write("<a href=\"images/" + strFileName + "\"><img src=\"thumbs/" + strFileName + "\">"); } catch { Response.Write("Der skete en fejl ved processering af billedet"); } } else { Response.Write("Filnavn eksisterer allerede"); } } else { //Fil var for stor Response.Write("Billedet er over 100kb"); } } private static Bitmap Resize(Bitmap b, int MaxHeight, int MaxWidth) { int nWidth = b.Width; int nHeight = b.Height; if(nHeight>MaxHeight) { nWidth = (int)((((double)b.Width)/((double)b.Height))*((double)MaxHeight)); nHeight = MaxHeight; } if(nWidth>MaxWidth) { nWidth=MaxWidth; nHeight = (int)((((double)b.Height)/((double)b.Width))*((double)MaxWidth)); } Bitmap bTemp = (Bitmap)b.Clone(); b = new Bitmap(nWidth, nHeight, System.Drawing.Imaging.PixelFormat.Format24bppRgb); double nXFactor = (double)bTemp.Width/(double)nWidth; double nYFactor = (double)bTemp.Height/(double)nHeight; for (int x = 0; x < b.Width; ++x) for (int y = 0; y < b.Height; ++y) b.SetPixel(x, y, bTemp.GetPixel((int)(Math.Floor(x * nXFactor)), (int)(Math.Floor(y * nYFactor)))); return b; } </script> <html><body> <form enctype="multipart/form-data" runat="server"> <asp:PlaceHolder id="phEdit" runat="server"> <p>Select image to upload:</p> <input id="upload_file" type="file" runat="server" /><br><br> <asp:button Text="Upload File" onClick="myUploadCode" runat="server" /> </asp:PlaceHolder> </form> </body></html>
n1
Nybegynder
22. januar 2004 - 22:23
#27
takker!!!
n1
Nybegynder
10. maj 2004 - 20:44
#28
jeg skal egentligt bruge et script som minder lidt om det, det er bare mere simpelt, i kan kikke her:
http://www.eksperten.dk/spm/497328 det kunne være fedt, jeg har lidt svært ved selv at finde ud af det!
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.