PDA

View Full Version : کم کردن حجم عکس و کپی کردن آن



rsheytoonak
یک شنبه 13 اردیبهشت 1394, 18:50 عصر
سلام من با این کد

File.Copy(address1, address2);
یک عکس رو از آدرس یک توی آدرس 2 کپی می کنم حالا میخوام قبل از کپی سایز عکس رو کم کنم باید چکار کنم

Javad_raouf
دوشنبه 14 اردیبهشت 1394, 08:06 صبح
سلام
//Imput
string address1 = "C:\\Example.jpg";
string address2 = "C:\\ExampleNew.jpg";
int SmallerPercent = 50;
//Code:
Bitmap bmp = new Bitmap(address1);
int width = bmp.Width * SmallerPercent / 100;
int height = bmp.Height * SmallerPercent / 100;
Bitmap newBmp = new Bitmap(width, height);
Graphics g = Graphics.FromImage(newBmp);
g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQua lityBicubic;
g.DrawImage(bmp, new Rectangle(0, 0, width, height), new Rectangle(0, 0, bmp.Width, bmp.Height), GraphicsUnit.Pixel);
g.Dispose();
newBmp.Save(address2, System.Drawing.Imaging.ImageFormat.Jpeg);
1. با متغیر SmallerPercent مشخص کن که طول و عرض عکس نهایی چند درصد عکس اورجینال باشه
2. یا اینکه width و height رو دستی مقدار بده
ضمن اینکه اگر height و width رو اینجوری هم مقدار بدی:
int width = bmp.Width;

int height = bmp.Height;
طول و عرض عکس کوچیک نمیشه ولی بازم سایز فایل نهایی کمتر میشه

ali_72
دوشنبه 14 اردیبهشت 1394, 08:26 صبح
اینو امتحان کن خودم تست نکردم امیدوارم بدردت بخوره


private void CompressImage(Image sourceImage, int imageQuality, string savePath) {
try
{
//Create an ImageCodecInfo-object for the codec information
ImageCodecInfo jpegCodec = null;


//Set quality factor for compression
EncoderParameter imageQualitysParameter = new EncoderParameter(
System.Drawing.Imaging.Encoder.Quality, imageQuality);


//List all avaible codecs (system wide)
ImageCodecInfo[] alleCodecs = ImageCodecInfo.GetImageEncoders();


EncoderParameters codecParameter = new EncoderParameters(1);
codecParameter.Param[0] = imageQualitysParameter;


//Find and choose JPEG codec
for (int i = 0; i < alleCodecs.Length; i++)
{
if (alleCodecs[i].MimeType == "image/jpeg")
{
jpegCodec = alleCodecs[i];
break;
}
}


//Save compressed image
// sourceImage.Save(savePath, jpegCodec, codecParameter);
Bitmap varBmp = (Bitmap)Bitmap.FromFile(savePath);
Bitmap newBitmap = new Bitmap(varBmp);
varBmp.Dispose();
//do something
newBitmap.Save(savePath, jpegCodec, codecParameter);
}
catch (Exception e)
{
throw e;
}
}

rsheytoonak
دوشنبه 14 اردیبهشت 1394, 09:48 صبح
سلام
//Imput
string address1 = "C:\\Example.jpg";
string address2 = "C:\\ExampleNew.jpg";
int SmallerPercent = 50;
//Code:
Bitmap bmp = new Bitmap(address1);
int width = bmp.Width * SmallerPercent / 100;
int height = bmp.Height * SmallerPercent / 100;
Bitmap newBmp = new Bitmap(width, height);
Graphics g = Graphics.FromImage(newBmp);
g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQua lityBicubic;
g.DrawImage(bmp, new Rectangle(0, 0, width, height), new Rectangle(0, 0, bmp.Width, bmp.Height), GraphicsUnit.Pixel);
g.Dispose();
newBmp.Save(address2, System.Drawing.Imaging.ImageFormat.Jpeg);
1. با متغیر SmallerPercent مشخص کن که طول و عرض عکس نهایی چند درصد عکس اورجینال باشه
2. یا اینکه width و height رو دستی مقدار بده
ضمن اینکه اگر height و width رو اینجوری هم مقدار بدی:
int width = bmp.Width;

int height = bmp.Height;
طول و عرض عکس کوچیک نمیشه ولی بازم سایز فایل نهایی کمتر میشه
ممنون فقط مشکلی که دارم 10 تا عکس رو اینجوری هم زمان میخوام این کار رو روش انجام بدم و اگه حجم عکس 4 5 مگ باشه خطای out of memory میده آیا راهی هست که
این مشکلش حل بشه؟