Nette araştırmama rağmen tam istediğim gibi bir kod bulamadım. Kendi projemde lazım oldu ve bir çok kişininde bu tarz birşey aradığını düşünüyorum. Şimdi nasıl yapıldığına bir göz atalım.
İlk önce kaç adet resim ekleyip resize yapıcaksak ona göre FileUpload kontrolü ve 1 adet Button ekleyin .
Şimdi Default.aspx.cs Kodlarımızı inceleyim.
using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Data.OleDb;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging;
using System.IO;
public partial class Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
}
protected void Submit_Click(object sender, EventArgs e)
{
if (IsPostBack)
uploadveresize();
}
private void uploadveresize()
{
// ana dizini alıyoruz
string root = Server.MapPath("~/");
if (!root.EndsWith(@"\"))
root += @"\";
// resim klasörü yolunu belirtiyoruz
string fileDirectory = root + @"\resim\";
// Eğer resim klasörü yoksa oluşturuyoruz
if (!System.IO.Directory.Exists(fileDirectory))
System.IO.Directory.CreateDirectory(fileDirectory);
for (int i = 0; i < Request.Files.Count; i++)
{
HttpPostedFile fi = Request.Files.Get(i);
byte[] fileBytes = new byte[fi.ContentLength];
using (System.IO.Stream stream = fi.InputStream)
{
stream.Read(fileBytes, 0, fi.ContentLength);
}
// rastgele isim oluşturuyoruz
string fileName = Guid.NewGuid().ToString();
//buyuk resim kaydediyoruz genişliği 500 yüksekliği uzunluğuna orantılı kısalıyor.
File.WriteAllBytes(fileDirectory + fileName + ".jpg", ResizeImageFile(fileBytes, 500));
//ufak resim kaydediyoruz yine aynı genişliği 100 yüksekliği uzunluğuna orantılı kısalıyor.
File.WriteAllBytes(fileDirectory + fileName + "_kucuk.jpg", ResizeImageFile(fileBytes, 100));
fileBytes = null;
}
}
//resimler resize ediliyor
private static byte[] ResizeImageFile(byte[] imageFile, int targetSize)
{
using (System.Drawing.Image oldImage =
System.Drawing.Image.FromStream(new MemoryStream(imageFile)))
{
Size newSize = CalculateDimensions(oldImage.Size, targetSize);
using (Bitmap newImage =
new Bitmap(newSize.Width,
newSize.Height, PixelFormat.Format24bppRgb))
{
using (Graphics canvas = Graphics.FromImage(newImage))
{
canvas.SmoothingMode = SmoothingMode.AntiAlias;
canvas.InterpolationMode = InterpolationMode.HighQualityBicubic;
canvas.PixelOffsetMode = PixelOffsetMode.HighQuality;
canvas.DrawImage(oldImage,
new Rectangle(new Point(0, 0), newSize));
MemoryStream m = new MemoryStream();
newImage.Save(m, ImageFormat.Jpeg);
return m.GetBuffer();
}
}
}
}
// Yeni boyutlandırma hesaplamaları yapılıyor
private static Size CalculateDimensions(Size oldSize, int targetSize)
{
Size newSize = new Size();
if (oldSize.Height > oldSize.Width)
{
newSize.Width =
(int)(oldSize.Width * ((float)targetSize / (float)oldSize.Height));
newSize.Height = targetSize;
}
else
{
newSize.Width = targetSize;
newSize.Height =
(int)(oldSize.Height * ((float)targetSize / (float)oldSize.Width));
}
return newSize;
}
}
Kodlarımız hepsi bukadar. Biraz karışık gelmiş olabilir fakat göreceksinizki çok kullanışlı bir kod. Kodlarla ilgili ufak bir şey söylemek isytiyorum. Farkındaysanız FileUpload1 FileUpload2 FileUpload3 isimlerini hiç kullanmadık. Yani siz oraya 10 tane file upload ekleyin hepsinin hem küçük halini hemde büyük halini size kaydeder. Kodları birdefa yazıyorsunuz FileUpload kontrolünü çoğaltıp azaltmak size kalmış.