codice:
using System;
using System.IO;
using System.Collections.Generic;
using System.Text;
using System.Drawing;
using System.Drawing.Text;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging;
using System.Web;
namespace gdi
{
public static class img
{
static img()
{
}
public enum FormatoOutput
{
jpg, png, bmp, gif
}
public static Bitmap ImgLoad(string immagineInput)
{
try
{
Bitmap bmp = (Bitmap)System.Drawing.Image.FromFile(immagineInput);
return bmp;
}
catch (System.IO.FileNotFoundException ex)
{ throw new Exception("File non trovato"); }
catch (System.IO.FileLoadException ex)
{ throw new Exception("Errore lettura file"); }
catch (Exception ex)
{ throw; }
}
public static Bitmap ImgLoad(HttpPostedFile immagineInput)
{
Bitmap bmp = (Bitmap)System.Drawing.Image.FromStream(immagineInput.InputStream);
return bmp;
}
public static void ImgSaveToFile(Bitmap bmp, string immagineOutput, FormatoOutput formatoOutput, int compressione)
{
//correggo l'estensione del file rispetto al formato scelto
immagineOutput = fileOutput(immagineOutput, formatoOutput);
//0 = minima qualità, 100=massima
if (compressione < -1 || compressione > 100) compressione = -1;
EncoderParameters encParams = new EncoderParameters();
EncoderParameter encParam = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, compressione);
encParams.Param[0] = encParam;
System.Drawing.Imaging.ImageCodecInfo[] imagCodecs = System.Drawing.Imaging.ImageCodecInfo.GetImageEncoders();
System.Drawing.Imaging.ImageCodecInfo imageCodec = null;
for (int i = 0; i < imagCodecs.Length; i++)
{
if (imagCodecs[i].MimeType == "image/jpeg")
{
imageCodec = imagCodecs[i];
break;
}
}
if (formatoOutput == FormatoOutput.jpg)
{
if (compressione == -1)
{
bmp.Save(immagineOutput, System.Drawing.Imaging.ImageFormat.Jpeg);
}
else
{
bmp.Save(immagineOutput, imageCodec, encParams);
}
}
else if (formatoOutput == FormatoOutput.gif)
{
bmp.Save(immagineOutput, System.Drawing.Imaging.ImageFormat.Gif);
}
else if (formatoOutput == FormatoOutput.bmp)
{
bmp.Save(immagineOutput, System.Drawing.Imaging.ImageFormat.Bmp);
}
else if (formatoOutput == FormatoOutput.png)
{
bmp.Save(immagineOutput, System.Drawing.Imaging.ImageFormat.Png);
}
}
public static void ImgSaveToResponseOutputStream(Bitmap bmp, FormatoOutput formatoOutput, int compressione)
{
//0 = minima qualità, 100=massima
if (compressione < -1 || compressione > 100) compressione = -1;
EncoderParameters encParams = new EncoderParameters();
EncoderParameter encParam = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, compressione);
encParams.Param[0] = encParam;
System.Drawing.Imaging.ImageCodecInfo[] imagCodecs = System.Drawing.Imaging.ImageCodecInfo.GetImageEncoders();
System.Drawing.Imaging.ImageCodecInfo imageCodec = null;
for (int i = 0; i < imagCodecs.Length; i++)
{
if (imagCodecs[i].MimeType == "image/jpeg")
{
imageCodec = imagCodecs[i];
break;
}
}
if (formatoOutput == FormatoOutput.jpg)
{
if (compressione == -1)
{
System.Web.HttpContext.Current.Response.ContentType = "image/jpeg";
bmp.Save(System.Web.HttpContext.Current.Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg);
}
else
{
System.Web.HttpContext.Current.Response.ContentType = "image/jpeg";
bmp.Save(System.Web.HttpContext.Current.Response.OutputStream, imageCodec, encParams);
}
}
else if (formatoOutput == FormatoOutput.gif)
{
System.Web.HttpContext.Current.Response.ContentType = "image/gif";
bmp.Save(System.Web.HttpContext.Current.Response.OutputStream, System.Drawing.Imaging.ImageFormat.Gif);
}
else if (formatoOutput == FormatoOutput.bmp)
{
using (MemoryStream ms = new MemoryStream())
{
bmp.Save(ms, System.Drawing.Imaging.ImageFormat.Bmp);
System.Web.HttpContext.Current.Response.ContentType = "image/bmp";
ms.WriteTo(System.Web.HttpContext.Current.Response.OutputStream);
}
}
else if (formatoOutput == FormatoOutput.png)
{
using (MemoryStream ms = new MemoryStream())
{
bmp.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
System.Web.HttpContext.Current.Response.ContentType = "image/png";
ms.WriteTo(System.Web.HttpContext.Current.Response.OutputStream);
}
}
bmp.Dispose();
System.Web.HttpContext.Current.Response.End();
}
//'******************************************************
public static void ImgSaveToFile(Bitmap bmp, string immagineOutput, FormatoOutput formatoOutput)
{
ImgSaveToFile(bmp, immagineOutput, formatoOutput, -1);
}
//'formato jpg, compressione standard
public static void ImgSaveToFile(Bitmap bmp, string immagineOutput)
{
ImgSaveToFile(bmp, immagineOutput, FormatoOutput.jpg, -1);
}
public static void ImgSaveToResponseOutputStream(Bitmap bmp)
{
ImgSaveToResponseOutputStream(bmp, FormatoOutput.jpg, -1);
}
//'uscita in response.outputstream, compressione standard se si sceglie formato jpg
public static void ImgSaveToResponseOutputStream(Bitmap bmp, FormatoOutput formatoOutput)
{
ImgSaveToResponseOutputStream(bmp, formatoOutput, -1);
}
//'******************************************************
/*--------------------------------------------------------------------------------------------------------------------------------------------------------
* Serve per ridimensionare immagini
* se width e height sono > 0, l'immagine viene ridimensionata
* porre width e height = -1 o 0 per non ridimensionare l'immagine
* se specifico width e height vengono usati questi valori e l'immagine può essere deformata
* se specifico whidth e height = 0, o viceversa, vengono rispettati i rapporti w/h
* interpolazione: se InterpolationMode.Invalid, viene usato il predefinito
* ingrandisciPerAdattare: vero=ingrandisce l'immagine per adattarla alle dimensioni
* -------------------------------------------------------------------------------------------------------------------------------------------------------*/
public static void ImgResize(ref Bitmap bmp, int width, int height, System.Drawing.Drawing2D.InterpolationMode interpolazione, bool ingrandisciPerAdattare)
{
Bitmap MiniaturaBmp = null;
Graphics gr = null;
// c'è da ridimensionare? 'l'immagine non viene ingrandita?
if( !ingrandisciPerAdattare)
ingrandisciPerAdattare = bmp.Width > width && bmp.Height > height;
if( (width > 0 || height > 0) && ingrandisciPerAdattare )
{
// se è specificata solo la larghezza, calcola l'altezza
if( height <= 0 )
height = Convert.ToInt32((double)width * (double)bmp.Height / (double)bmp.Width);
// (e viceversa)
if ( width <= 0 )
width = Convert.ToInt32((double)height * (double)bmp.Width / (double)bmp.Height);
// creo l'immagine ridimensionata con i parametri impostati
if( interpolazione == System.Drawing.Drawing2D.InterpolationMode.Invalid)
{
MiniaturaBmp = new System.Drawing.Bitmap(bmp, width, height);
//MiniaturaBmp.SetResolution(72, 72)
}
else
{
MiniaturaBmp = new System.Drawing.Bitmap(width, height);
//'MiniaturaBmp.SetResolution(72, 72)
gr = Graphics.FromImage(MiniaturaBmp);
gr.InterpolationMode = interpolazione;
//se voglio alta qualità (HighQualityBicubic) imposto qualità altri parametri
if (interpolazione == System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic)
{
gr.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
gr.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.HighQuality;
gr.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
}
//gr.DrawImage(bmp, New Rectangle(0, 0, width, height), 0, 0, bmp.Width, bmp.Height, GraphicsUnit.Pixel)
gr.DrawImage(bmp, 0, 0, width, height);
gr.Dispose();
}
bmp.Dispose();
bmp = MiniaturaBmp;
}
else
{
Bitmap b = (Bitmap) bmp.Clone();
bmp.Dispose();
bmp = b;
}
}