This code creates a byte[] that contains an image into a byte[] that contains an image of a different size. At this point it does create a byte array of the proper size, and it inserts a new row into the table. I created the code that reads it back out of the table and displays it on the ASP.NET page. The image displays as it should, which verifies that it is properly encoded in the new byte array.
#region Create Thumbnail
// Create a thumbnail in byte array format from the image encoded in the passed byte array.
// (RESIZE an image in a byte[] variable.)
public static byte[] CreateThumbnail(byte[] PassedImage, int LargestSide, int Height, int Width)
{
byte[] ReturnedThumbnail;
using (System.IO.MemoryStream StartMemoryStream = new System.IO.MemoryStream(), NewMemoryStream = new System.IO.MemoryStream())
{
// write the string to the stream
StartMemoryStream.Write(PassedImage, 0, PassedImage.Length);
// create the start Bitmap from the MemoryStream that contains the image
System.Drawing.Bitmap startBitmap = new System.Drawing.Bitmap(StartMemoryStream);
// set thumbnail height and width proportional to the original image.
int newHeight;
int newWidth;
double HW_ratio;
if (startBitmap.Height > startBitmap.Width)
{
newHeight = LargestSide;
HW_ratio = (double)((double)LargestSide / (double)startBitmap.Height);
newWidth = (int)(HW_ratio * (double)startBitmap.Width);
}
else
{
newWidth = LargestSide;
HW_ratio = (double)((double)LargestSide / (double)startBitmap.Width);
newHeight = (int)(HW_ratio * (double)startBitmap.Height);
}
newHeight = Height;
newWidth = Width;
// create a new Bitmap with dimensions for the thumbnail.
System.Drawing.Bitmap newBitmap = new System.Drawing.Bitmap(newWidth, newHeight);
// Copy the image from the START Bitmap into the NEW Bitmap.
// This will create a thumnail size of the same image.
newBitmap = ResizeImage(startBitmap, newWidth, newHeight);
// Save this image to the specified stream in the specified format.
newBitmap.Save(NewMemoryStream, System.Drawing.Imaging.ImageFormat.Jpeg);
// Fill the byte[] for the thumbnail from the new MemoryStream.
ReturnedThumbnail = NewMemoryStream.ToArray();
}
// return the resized image as a string of bytes.
return ReturnedThumbnail;
}
// Resize a Bitmap
private static System.Drawing.Bitmap ResizeImage(System.Drawing.Bitmap image, int width, int height)
{
System.Drawing.Bitmap resizedImage = new System.Drawing.Bitmap(width, height);
using (System.Drawing.Graphics gfx = System.Drawing.Graphics.FromImage(resizedImage))
{
gfx.DrawImage(image, new System.Drawing.Rectangle(0, 0, width, height),
new System.Drawing.Rectangle(0, 0, image.Width, image.Height), System.Drawing.GraphicsUnit.Pixel);
}
return resizedImage;
}
public byte[] imageToByteArray(System.Drawing.Image imageIn)
{
MemoryStream ms = new MemoryStream();
imageIn.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);
return ms.ToArray();
}
public System.Drawing.Image byteArrayToImage(byte[] byteArrayIn)
{
MemoryStream ms = new MemoryStream(byteArrayIn);
System.Drawing.Image returnImage = System.Drawing.Image.FromStream(ms);
return returnImage;
}
#endregion
User above code like this :
System.Drawing.Image returnImage;
byte[] byteArrayIn;
MemoryStream ms;
//Get Bytes from Requested file
byte[] buffer = new byte[uploads.ContentLength];
uploads.InputStream.Read(buffer, 0, uploads.ContentLength);
if ((uploads.ContentLength / 1000) > 1000)
{
//Create image from Bytes array
System.Drawing.Image img = byteArrayToImage(buffer);
int height = Convert.ToInt32(Convert.ToDouble(img.Height) * .7);
int width = Convert.ToInt32(Convert.ToDouble(img.Width) * .7);
//Resize Image - ORIGINAL
byteArrayIn = CreateThumbnail(buffer, 10000, height, width);
//byteArrayIn = CreateThumbnail(buffer, 10000, 550, 700);
ms = new MemoryStream(byteArrayIn);
returnImage = System.Drawing.Image.FromStream(ms);
returnImage.Save(path_ORIGINAL);
}
else
{
uploads.SaveAs(path_ORIGINAL);
}
//Resize Image - Create Thumbnail
byteArrayIn = CreateThumbnail(buffer, 100, 105, 145);
ms = new MemoryStream(byteArrayIn);
returnImage = System.Drawing.Image.FromStream(ms);
returnImage.Save(path_Thumbnail);
// Create a thumbnail in byte array format from the image encoded in the passed byte array.
// (RESIZE an image in a byte[] variable.)
public static byte[] CreateThumbnail(byte[] PassedImage, int LargestSide, int Height, int Width)
{
byte[] ReturnedThumbnail;
using (System.IO.MemoryStream StartMemoryStream = new System.IO.MemoryStream(), NewMemoryStream = new System.IO.MemoryStream())
{
// write the string to the stream
StartMemoryStream.Write(PassedImage, 0, PassedImage.Length);
// create the start Bitmap from the MemoryStream that contains the image
System.Drawing.Bitmap startBitmap = new System.Drawing.Bitmap(StartMemoryStream);
// set thumbnail height and width proportional to the original image.
int newHeight;
int newWidth;
double HW_ratio;
if (startBitmap.Height > startBitmap.Width)
{
newHeight = LargestSide;
HW_ratio = (double)((double)LargestSide / (double)startBitmap.Height);
newWidth = (int)(HW_ratio * (double)startBitmap.Width);
}
else
{
newWidth = LargestSide;
HW_ratio = (double)((double)LargestSide / (double)startBitmap.Width);
newHeight = (int)(HW_ratio * (double)startBitmap.Height);
}
newHeight = Height;
newWidth = Width;
// create a new Bitmap with dimensions for the thumbnail.
System.Drawing.Bitmap newBitmap = new System.Drawing.Bitmap(newWidth, newHeight);
// Copy the image from the START Bitmap into the NEW Bitmap.
// This will create a thumnail size of the same image.
newBitmap = ResizeImage(startBitmap, newWidth, newHeight);
// Save this image to the specified stream in the specified format.
newBitmap.Save(NewMemoryStream, System.Drawing.Imaging.ImageFormat.Jpeg);
// Fill the byte[] for the thumbnail from the new MemoryStream.
ReturnedThumbnail = NewMemoryStream.ToArray();
}
// return the resized image as a string of bytes.
return ReturnedThumbnail;
}
// Resize a Bitmap
private static System.Drawing.Bitmap ResizeImage(System.Drawing.Bitmap image, int width, int height)
{
System.Drawing.Bitmap resizedImage = new System.Drawing.Bitmap(width, height);
using (System.Drawing.Graphics gfx = System.Drawing.Graphics.FromImage(resizedImage))
{
gfx.DrawImage(image, new System.Drawing.Rectangle(0, 0, width, height),
new System.Drawing.Rectangle(0, 0, image.Width, image.Height), System.Drawing.GraphicsUnit.Pixel);
}
return resizedImage;
}
public byte[] imageToByteArray(System.Drawing.Image imageIn)
{
MemoryStream ms = new MemoryStream();
imageIn.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);
return ms.ToArray();
}
public System.Drawing.Image byteArrayToImage(byte[] byteArrayIn)
{
MemoryStream ms = new MemoryStream(byteArrayIn);
System.Drawing.Image returnImage = System.Drawing.Image.FromStream(ms);
return returnImage;
}
#endregion
User above code like this :
System.Drawing.Image returnImage;
byte[] byteArrayIn;
MemoryStream ms;
//Get Bytes from Requested file
byte[] buffer = new byte[uploads.ContentLength];
uploads.InputStream.Read(buffer, 0, uploads.ContentLength);
if ((uploads.ContentLength / 1000) > 1000)
{
//Create image from Bytes array
System.Drawing.Image img = byteArrayToImage(buffer);
int height = Convert.ToInt32(Convert.ToDouble(img.Height) * .7);
int width = Convert.ToInt32(Convert.ToDouble(img.Width) * .7);
//Resize Image - ORIGINAL
byteArrayIn = CreateThumbnail(buffer, 10000, height, width);
//byteArrayIn = CreateThumbnail(buffer, 10000, 550, 700);
ms = new MemoryStream(byteArrayIn);
returnImage = System.Drawing.Image.FromStream(ms);
returnImage.Save(path_ORIGINAL);
}
else
{
uploads.SaveAs(path_ORIGINAL);
}
//Resize Image - Create Thumbnail
byteArrayIn = CreateThumbnail(buffer, 100, 105, 145);
ms = new MemoryStream(byteArrayIn);
returnImage = System.Drawing.Image.FromStream(ms);
returnImage.Save(path_Thumbnail);
Comments
Post a Comment