This function return an resized and centered image.
I would like tu execute it like thumb.aspx?image=test.jpg&width=100&height=50&needToFill=true to get a ContentType = “image/jpeg”
public static System.Drawing.Image FixedSize(Image image, int Width, int Height, bool needToFill)
{
int sourceWidth = image.Width;
int sourceHeight = image.Height;
int sourceX = 0;
int sourceY = 0;
double destX = 0;
double destY = 0;
double nScale = 0;
double nScaleW = 0;
double nScaleH = 0;
nScaleW = ((double)Width / (double)sourceWidth);
nScaleH = ((double)Height / (double)sourceHeight);
if (!needToFill)
{
nScale = Math.Min(nScaleH, nScaleW);
}
else
{
nScale = Math.Max(nScaleH, nScaleW);
destY = (Height - sourceHeight * nScale) / 2;
destX = (Width - sourceWidth * nScale) / 2;
}
if (nScale > 1)
nScale = 1;
int destWidth = (int)Math.Round(sourceWidth * nScale);
int destHeight = (int)Math.Round(sourceHeight * nScale);
System.Drawing.Bitmap bmPhoto = null;
try
{
bmPhoto = new System.Drawing.Bitmap(destWidth + (int)Math.Round(2 * destX), destHeight + (int)Math.Round(2 * destY));
}
catch (Exception ex)
{
throw new ApplicationException(string.Format("destWidth:{0}, destX:{1}, destHeight:{2}, desxtY:{3}, Width:{4}, Height:{5}",
destWidth, destX, destHeight, destY, Width, Height), ex);
}
using (System.Drawing.Graphics grPhoto = System.Drawing.Graphics.FromImage(bmPhoto))
{
grPhoto.InterpolationMode = InterpolationMode.HighQualityBicubic;
grPhoto.CompositingQuality = CompositingQuality.HighQuality;
grPhoto.SmoothingMode = SmoothingMode.HighQuality;
Rectangle to = new System.Drawing.Rectangle((int)Math.Round(destX), (int)Math.Round(destY), destWidth, destHeight);
Rectangle from = new System.Drawing.Rectangle(sourceX, sourceY, sourceWidth, sourceHeight);
grPhoto.DrawImage(image, to, from, System.Drawing.GraphicsUnit.Pixel);
return bmPhoto;
}
}
Can I just add this in somehow?
void Page_Load(Object sender, EventArgs e){
Answers:
Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.
Method 1
You can use an HTTP Handler to satisfy such requirement. An ASP.NET HTTP handler is the process (frequently referred to as the “endpoint”) that runs in response to a request made to an ASP.NET Web application. To learn more, take a look at HTTP Handlers and HTTP Modules Overview
ASHX Example
To process a request like this: http://localhost:19610/ImageHandler.ashx?width=200&height=200
- Add a new Generic Handler (.ashx) to project and name it
ImageHandler.ashx - Write code to get parameters from query string and perform processing and return suitable response:
using System;
using System.Collections.Generic;
using System.Web;
using System.Drawing;
namespace WebApplication1 /*use your application namespace*/
{
public class ImageHandler: IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
int width = 0;
int.TryParse(context.Request.QueryString["width"], out width);
var height = 0;
int.TryParse(context.Request.QueryString["height"], out height);
if (width <= 0) width = 100;
if (height <= 0) height = 100;
using (var image = new Bitmap(width, height))
{
using (var g = Graphics.FromImage(image))
g.Clear(Color.Red);
byte[] buffer =
(byte[])new ImageConverter().ConvertTo(image, typeof(byte[]));
context.Response.ContentType = "image/bmp";
context.Response.OutputStream.Write(buffer, 0, buffer.Length);
}
}
public bool IsReusable { get { return false; } }
}
}
ASPX Example
If for any reason you want to use an aspx instead, you can create a aspx file without any code behind file like this:
<%@ Page Title="Home Page" Language="C#" %>
<script language="C#" runat="server">
protected void Page_Load(object sender, EventArgs e)
{
int width = 0;
int.TryParse(Request.QueryString["width"], out width);
var height = 0;
int.TryParse(Request.QueryString["height"], out height);
if (width <= 0) width = 100;
if (height <= 0) height = 100;
using (var image = new System.Drawing.Bitmap(width, height))
{
using (var g = System.Drawing.Graphics.FromImage(image))
g.Clear(System.Drawing.Color.Red);
byte[] buffer =
(byte[])new System.Drawing.ImageConverter().ConvertTo(image, typeof(byte[]));
Response.ContentType = "image/bmp";
Response.OutputStream.Write(buffer, 0, buffer.Length);
}
}
</script>
All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0