public static string ChangeImageProportion(string strImgPath, string strImgOutputPath, int iWidth, int iHeight)
{
try
{
//Comprueba la extensión
//if (Path.GetExtension(strImgPath).ToLower() != ".jpg")
//{
// throw new Exception("El fichero debe estar en formato JPG. (" + strImgPath + ")");
//}
//Lee el fichero en un stream
Stream mystream = null;
if (strImgPath.StartsWith("http"))
{
HttpWebRequest wreq = (HttpWebRequest)WebRequest.Create(strImgPath);
HttpWebResponse wresp = (HttpWebResponse)wreq.GetResponse();
mystream = wresp.GetResponseStream();
}
else
mystream = File.OpenRead(strImgPath);
// Cargo la imágen
Bitmap source = new Bitmap(mystream);
int _targetWidth = source.Width;
int _targetHeight = source.Height;
/*** Calculo de las proporciones finales ***/
double _relation = ((double)source.Width) / ((double)source.Height);
double _canvasRelation = ((double)iWidth) / ((double)iHeight);
if (_relation > _canvasRelation)
{
// El ancho es el lado grande, hay que aumentar el alto
_targetHeight = iHeight * source.Width / iWidth;
}
else if (_relation < _canvasRelation)
{
// El alto es el lado grande, hay que aumentar el ancho
_targetWidth = iWidth * source.Height / iHeight;
}
// Ahora miro el desfase
int iTop = (_targetHeight - source.Height) / 2;
int iLeft = (_targetWidth - source.Width) / 2;
// La nueva
Bitmap target = new Bitmap(_targetWidth, _targetHeight);
Graphics g = Graphics.FromImage(target);
g.CompositingQuality = CompositingQuality.HighQuality;
Color cW = Color.White;
Brush brush = new SolidBrush(cW);
g.FillRectangle(brush, 0, 0, _targetWidth, _targetHeight);
g.DrawImage(source,
new Rectangle(iLeft, iTop, source.Width, source.Height),
0,
0,
source.Width,
source.Height,
GraphicsUnit.Pixel);
// We will store the correct image codec in this object
ImageCodecInfo ici = GetEncoderInfo("image/jpeg"); ;
// This will specify the image quality to the encoder
EncoderParameter epQuality = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, 99L);
// Store the quality parameter in the list of encoder parameters
EncoderParameters eps = new EncoderParameters(1);
eps.Param[0] = epQuality;
// Genero un nuevo nombre de fichero
//strImgPath = Path.Combine(Path.GetDirectoryName(strImgPath),Guid.NewGuid().ToString() + ".jpg");
target.Save(strImgOutputPath, ici, eps);
source.Dispose();
target.Dispose();
g.Dispose();
return strImgPath;
}
catch
{
throw;
}
}