¿Cómo cambiaría el tamaño de una imagen JPEG, a un ancho fijo, manteniendo la relación de aspecto? De una manera simple, preservando la calidad.Redimensionar la imagen JPEG a un ancho fijo, manteniendo la relación de aspecto tal como está
Respuesta
Si reduce el ancho en un 25 por ciento a un valor fijo, debe reducir la altura en un 25 por ciento.
Si está aumentando el ancho en un 25 por ciento a un valor fijo, debe aumentar la altura en un 25 por ciento.
Es realmente sencillo.
Creo que hay muchas muestras de esto si las buscas. Aquí está el que yo utilizo habitualmente ...
public static Stream ResizeGdi(Stream stream, System.Drawing.Size size)
{
Image image = Image.FromStream(stream);
int width = image.Width;
int height = image.Height;
int sourceX = 0, sourceY = 0, destX = 0, destY = 0;
float percent = 0, percentWidth = 0, percentHeight = 0;
percentWidth = ((float)size.Width/(float)width);
percentHeight = ((float)size.Height/(float)height);
int destW = 0;
int destH = 0;
if (percentHeight < percentWidth)
{
percent = percentHeight;
}
else
{
percent = percentWidth;
}
destW = (int)(width * percent);
destH = (int)(height * percent);
MemoryStream mStream = new MemoryStream();
if (destW == 0
&& destH == 0)
{
image.Save(mStream, System.Drawing.Imaging.ImageFormat.Jpeg);
return mStream;
}
using (Bitmap bitmap = new Bitmap(destW, destH, System.Drawing.Imaging.PixelFormat.Format48bppRgb))
{
using (System.Drawing.Graphics graphics = System.Drawing.Graphics.FromImage(bitmap))
{
//graphics.Clear(Color.Red);
graphics.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
graphics.DrawImage(image,
new Rectangle(destX, destY, destW, destH),
new Rectangle(sourceX, sourceY, width, height),
GraphicsUnit.Pixel);
}
bitmap.Save(mStream, System.Drawing.Imaging.ImageFormat.Jpeg);
}
mStream.Position = 0;
return mStream as Stream;
}
Ejemplo del código de llamada ...
Stream stream = File.Open(filePath, FileMode.Open, FileAccess.Read, FileShare.None);
resizedStream = ImageUtility.ResizeGdi(stream, new System.Drawing.Size(resizeWidth, resizeHeight));
Una búsqueda rápida en el proyecto de código se ha encontrado el siguiente artículo. Permite cambiar el tamaño de las imágenes, que acepta un booleano para restringir la nueva imagen y mantener la relación de aspecto de los originales. No estoy seguro de cómo es la calidad, ya que no se proporcionaron capturas de pantalla. Véase el artículo here
Suponiendo que hay un (double width
) Variable:
Image imgOriginal = Bitmap.FromFile(path);
double height = (imgOriginal.Height * width)/imgOriginal.Width;
Image imgnew = new Bitmap((int)width, (int)height, PixelFormat.Format32bppArgb);
Graphics g = Graphics.FromImage(imgnew);
g.DrawImage(imgOriginal, new Point[]{new Point(0,0), new Point(width, 0), new Point(0, height)}, new Rectangle(0,0,imgOriginal.Width, imgOriginal.Height), GraphicsUnit.Pixel);
Al final se le realizarán una nueva imagen con widthxheight, entonces, que tenga; necesitará para limpiar el gráfico guardar el correo imgnew
Esto escala en el eje vertical única:
public static Image ResizeImageFixedWidth(Image imgToResize, int width)
{
int sourceWidth = imgToResize.Width;
int sourceHeight = imgToResize.Height;
float nPercent = ((float)width/(float)sourceWidth);
int destWidth = (int)(sourceWidth * nPercent);
int destHeight = (int)(sourceHeight * nPercent);
Bitmap b = new Bitmap(destWidth, destHeight);
Graphics g = Graphics.FromImage((Image)b);
g.InterpolationMode = InterpolationMode.HighQualityBicubic;
g.DrawImage(imgToResize, 0, 0, destWidth, destHeight);
g.Dispose();
return (Image)b;
}
- 1. Redimensionar la imagen para ajustarla a la relación de aspecto
- 2. Redimensionar UIImage con relación de aspecto?
- 3. CSS: ¿ancho o alto del 100% manteniendo la relación de aspecto?
- 4. la escala de una imagen a la anchura disponible máximo, manteniendo la relación de aspecto y evitar ImageView espacio adicional
- 5. Cómo hacer zoom manteniendo la relación de aspecto correctamente
- 6. ¿Cómo cambio el tamaño de una imagen manteniendo la relación de aspecto en CSS?
- 7. Zoom VideoView para completar el ancho, manteniendo la relación de aspecto
- 8. Mantener la relación de aspecto con el ancho de la imagen en css
- 9. Cómo hacer una imagen lo más grande posible, manteniendo la relación de aspecto
- 10. Redimensionar/recortar/rellenar una imagen en un tamaño fijo
- 11. Como llegar a la altura NSAttributedString a un ancho fijo
- 12. Cambiar el tamaño de la forma manteniendo la relación de aspecto
- 13. css imagen de fondo redimensionar ancho recortar altura
- 14. ImageMagick cambiar la relación de aspecto sin escalar la imagen
- 15. jQuery cambiar el tamaño a la relación de aspecto
- 16. Escalando un SurfaceView fijo para llenarlo verticalmente y mantener la relación de aspecto
- 17. Java tamaño de imagen, mantener la relación de aspecto
- 18. Calcular altura para imagen/video según la relación de aspecto y el ancho
- 19. ¿Cómo mostrar imágenes redimensionadas en una página web manteniendo la relación de aspecto?
- 20. relación de compresión jpeg
- 21. Recorte de la imagen de relación de aspecto en la rejilla de respuesta de arranque
- 22. Redimensionar la imagen antes de subirla
- 23. Configuración de la relación de aspecto de la trama 3D
- 24. Redimensionar la imagen con Recortar
- 25. matplotlib - subtramas con relación de aspecto fija
- 26. HTML/IE: Imagen alargar a medida, preservar la relación de aspecto
- 27. Div ancho fijo a la izquierda, relleno ancho restante div a la derecha
- 28. C#: Cómo calcular la relación de aspecto
- 29. Configurar imagen DPI en relación con la altura/ancho C#
- 30. Cómo escalar una imagen en ImageView para mantener la relación de aspecto
El quiere mantener constante la anchura, esto no va a funcionar – rboarman