PDA

View Full Version : Resize عکس



bftarane
سه شنبه 14 آذر 1391, 07:55 صبح
سلام. لطفاً اين کدها رو ببينيد

protected void UploadFile(Object s, EventArgs e)
{
// First we check to see if the user has selected a file
if (fileUpload.HasFile)
{
// Find the fileUpload control
string filename = fileUpload.FileName;

// Check if the directory we want the image uploaded to actually exists or not
if (!Directory.Exists(MapPath(@"Uploaded-Files")))
{
// If it doesn't then we just create it before going any further
Directory.CreateDirectory(MapPath(@"Uploaded-Files"));
}
// Specify the upload directory
string directory = Server.MapPath(@"Uploaded-Files\");

// Create a bitmap of the content of the fileUpload control in memory
Bitmap originalBMP = new Bitmap(fileUpload.FileContent);

// Calculate the new image dimensions
int origWidth = originalBMP.Width;
int origHeight = originalBMP.Height;
int sngRatio = origWidth / origHeight;
int newWidth = 200;
int newHeight = newWidth / sngRatio;

// Create a new bitmap which will hold the previous resized bitmap
Bitmap newBMP = new Bitmap(originalBMP, newWidth, newHeight);

// Create a graphic based on the new bitmap
Graphics oGraphics = Graphics.FromImage(newBMP);
// Set the properties for the new graphic file
oGraphics.SmoothingMode = SmoothingMode.AntiAlias;oGraphics.InterpolationMod e = InterpolationMode.HighQualityBicubic;

// Draw the new graphic based on the resized bitmap
oGraphics.DrawImage(originalBMP, 0, 0, newWidth, newHeight);
// Save the new graphic file to the server
newBMP.Save(directory + "tn_" + filename);

// Once finished with the bitmap objects, we deallocate them.
originalBMP.Dispose();
newBMP.Dispose();
oGraphics.Dispose();

// Write a message to inform the user all is OK
label.Text = "File Name: <b style='color: red;'>" + filename + "</b><br>";
label.Text += "Content Type: <b style='color: red;'>" + fileUpload.PostedFile.ContentType + "</b><br>";
label.Text += "File Size: <b style='color: red;'>" + fileUpload.PostedFile.ContentLength.ToString() + "</b>";

// Display the image to the user
Image1.Visible = true;
Image1.ImageUrl = @"/Uploaded-Files/tn_" + filename;
}
else
{
label.Text = "No file uploaded!";
}
}
مرجع اين کدها اين لينک هستند
http://weblogs.asp.net/markmcdonnell/archive/2008/03/09/resize-image-before-uploading-to-server.aspx
من فقط newWidth رو 200 گذاشتم
من امتحان کردم
عکس نهايي هم عرض و هم طولش 200 هست
که البته اين دقيقاً چيزيه که من مي خوام
منتها من سر در نميارم چطور height هم همون 200 شده؟
من با اين دو تا عدد
2592

1944
دستي اومدم محاسبه کردم( اولي عرض هست دومي ارتفاع)
نتيجه براي ارتفاع 200 نشد
لطفاً هر کس بلده به من توضيح بده جريان رو.

betisa
سه شنبه 14 آذر 1391, 10:53 صبح
دلیل این که ارتفاع نشده 200 این خط از کد هست (26)


int newHeight = newWidth / sngRatio;

که ارتفاع جدید رو به نسبت عرض جدید تعیین میکنه

bftarane
سه شنبه 14 آذر 1391, 11:41 صبح
دلیل این که ارتفاع نشده 200فکر کنم متوجه سوال من نشديد. اتفاقاً من با عکس هايي که امتحان کردم ارتفاعشون شد 200.
و همين باعث تعجب من شده چون اين با چيزي که من در کدها مي بينم همخواني نداره و مي خوام دليلش رو بدونم.

يعني تا جايي که من امتحان کردم خروجي عکسهايي با عرض و ارتفاع يکسان بودند.

malloc
سه شنبه 14 آذر 1391, 11:53 صبح
فکر کنم متوجه سوال من نشديد. اتفاقاً من با عکس هايي که امتحان کردم ارتفاعشون شد 200.
و همين باعث تعجب من شده چون اين با چيزي که من در کدها مي بينم همخواني نداره و مي خوام دليلش رو بدونم.

يعني تا جايي که من امتحان کردم خروجي عکسهايي با عرض و ارتفاع يکسان بودند.

1-خوب شما تریس کن خط به خط ببین کجا مقدار 1944 تغییر پیدا میکنه به 200!!
2-راستی اگه مثلا عکس 100 در 150 به این تابع بدی خروجیش چند در چنده و چه شکلیه (یعنی strach میکنه یا برای اضافه عکس فضای خالی ایجاد میکنه )

اگه قسمت دوم و متوجه نشدی بیشتر توضیح بدم

bftarane
سه شنبه 14 آذر 1391, 12:34 عصر
اون کل کدها هستش. مي تونيد خودتون يه امتحاني بکنيد ولي من يه عکس فکر مي کنم با سايزي که در بالا گذاشتم بود امتحان کردم عکس خودم بود صورتم رو پهن تر نشون مي داد. ولي خوب فکر کنم خوب باشه چک کنيم اگه عکس از سايز مورد نظر ما کوچکتر بود Resize نکنه.

malloc
سه شنبه 14 آذر 1391, 13:28 عصر
شاید شما که الان تو این مساله دارید کار میکنید بتونید مشکل منو حل کنید .
من یه گالری دارم که 1000 در 300 پیکسل هستش.
یه تابع هم دارم که اگه عکس بزرگتر از این سایز بود ،اونو Cut میکنه و هم سایز با گالری من میکنه.
اما اگه عکس کوچکتر از اون سایز بود اونو Strach میکنه . اما من نمیخوام که Strach کنه . بلکه میخوام کاری که تو عکس زیر بصورت نمونه کردم و بکنه :
96000

که اون عکس با بکگراندی که من بهش میگم سایزش 1000 در 300 هستش

bftarane
سه شنبه 14 آذر 1391, 15:11 عصر
کلمه Merge رو سرچ بزنيد مثلاً Merge two Images in asp.net ببينيد کمکي مي کنه؟
متأسفانه وقتم خيلي کمه وگرنه دوست داشتم مي رفتم دنبال اين قضيه.

clover
سه شنبه 14 آذر 1391, 22:53 عصر
شاید شما که الان تو این مساله دارید کار میکنید بتونید مشکل منو حل کنید .
من یه گالری دارم که 1000 در 300 پیکسل هستش.
یه تابع هم دارم که اگه عکس بزرگتر از این سایز بود ،اونو Cut میکنه و هم سایز با گالری من میکنه.
اما اگه عکس کوچکتر از اون سایز بود اونو Strach میکنه . اما من نمیخوام که Strach کنه . بلکه میخوام کاری که تو عکس زیر بصورت نمونه کردم و بکنه :
96000

که اون عکس با بکگراندی که من بهش میگم سایزش 1000 در 300 هستش

به این مثال دقت کنید:


int destImageWidth = 1000;
int destImageHeight = 300;

Image sourceImage = Image.FromFile("SourceImagePath");
Image destImage = new Bitmap(destImageWidth, destImageHeight);
using (Graphics graphics = Graphics.FromImage(destImage))
{
graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;
graphics.FillRectangles(Brushes.Violet, new Rectangle[] { new Rectangle { X = 0, Y = 0, Width = destImageWidth, Height = destImageHeight } });
graphics.DrawImage(sourceImage, (destImageWidth - sourceImage.Width) / 2, (destImageHeight - sourceImage.Height) / 2, sourceImage.Width, sourceImage.Height);
}

destImage.Save("DestImagePath", ImageFormat.Jpeg);