コードを使用したサムネイルの自動生成
6250 ワード
///
///
///
///
///
///
///
/// true, false
public static bool getThumImage(String sourceFile, long quality, int multiple, String outputFile)
{
try
{
long imageQuality = quality;
Bitmap sourceImage = new Bitmap(sourceFile);
ImageCodecInfo myImageCodecInfo = GetEncoderInfo("image/jpeg");
System.Drawing.Imaging.Encoder myEncoder = System.Drawing.Imaging.Encoder.Quality;
EncoderParameters myEncoderParameters = new EncoderParameters(1);
EncoderParameter myEncoderParameter = new EncoderParameter(myEncoder, imageQuality);
myEncoderParameters.Param[0] = myEncoderParameter;
float xWidth = sourceImage.Width;
float yWidth = sourceImage.Height;
Bitmap newImage = new Bitmap((int)(xWidth / multiple), (int)(yWidth / multiple));
Graphics g = Graphics.FromImage(newImage);
g.DrawImage(sourceImage, 0, 0, xWidth / multiple, yWidth / multiple);
g.Dispose();
newImage.Save(outputFile, myImageCodecInfo, myEncoderParameters);
return true;
}
catch
{
return false;
}
}
public static bool getThumImage(Stream sourceFile, long quality, int multiple,ref byte[] outputFile)
{
try
{
long imageQuality = quality;
Bitmap sourceImage = new Bitmap(sourceFile);
ImageCodecInfo myImageCodecInfo = GetEncoderInfo("image/jpeg");
System.Drawing.Imaging.Encoder myEncoder = System.Drawing.Imaging.Encoder.Quality;
EncoderParameters myEncoderParameters = new EncoderParameters(1);
EncoderParameter myEncoderParameter = new EncoderParameter(myEncoder, imageQuality);
myEncoderParameters.Param[0] = myEncoderParameter;
float xWidth = sourceImage.Width;
float yWidth = sourceImage.Height;
Bitmap newImage = new Bitmap((int)(xWidth / multiple), (int)(yWidth / multiple));
Graphics g = Graphics.FromImage(newImage);
g.DrawImage(sourceImage, 0, 0, xWidth / multiple, yWidth / multiple);
g.Dispose();
using (MemoryStream ms = new MemoryStream())
{
newImage.Save(ms, myImageCodecInfo, myEncoderParameters);
outputFile = ms.GetBuffer();
}
LogInfo.Error(" outputFile="+ outputFile.Length);
return true;
}
catch(Exception ex)
{
LogInfo.Error(" ", ex);
return false;
}
}
private static ImageCodecInfo GetEncoderInfo(String mimeType)
{
int j;
ImageCodecInfo[] encoders;
encoders = ImageCodecInfo.GetImageEncoders();
for (j = 0; j < encoders.Length; ++j)
{
if (encoders[j].MimeType == mimeType)
return encoders[j];
}
return null;
}
private FileinFo GetOne(FileUpload file, string namekey)
{
if (file.HasFile)
{
FileinFo item = new FileinFo();
HttpPostedFile InputStream = file.PostedFile;
string filename = InputStream.FileName;
string ContentType = InputStream.ContentType;
int ContentLength = InputStream.ContentLength;
item.name = namekey;
item.filename = filename;
item.ContentType = ContentType;
LogInfo.Error(" filename=" + filename + " name = " + namekey + " ContentType = " + ContentType + "ContentLength =" + ContentLength);
if (ContentLength > 1024 * 250)
{
byte[] data = null;
long quality = 1024 * 250 / ContentLength;
getThumImage(InputStream.InputStream, quality, 1, ref data);
item.data = data;
}
else
{
byte[] data = new byte[ContentLength];
using (MemoryStream ms = new MemoryStream())
{
InputStream.InputStream.Read(data, 0, ContentLength);
}
item.data = data;
}
return item;
}
return null;
}
public static bool getThumImage(Stream sourceFile,ref byte[] outputFile)
{
try
{
Bitmap sourceImage = new Bitmap(sourceFile);
float sourceImageWidth = sourceImage.Width;
float sourceImageHeight = sourceImage.Height;
int maxWidth = 300;// 300*300
int newWidth = maxWidth;
int newHeight = maxWidth;
if (sourceImageWidth< maxWidth)
{
newWidth = (int)sourceImageWidth;
}
if (sourceImageWidth < newHeight)
{
newHeight = (int)sourceImageHeight;
}
Bitmap newImage = new Bitmap(newWidth, newHeight);
using (Graphics g = Graphics.FromImage(newImage))
{
g.DrawImage(sourceImage, 0, 0, newWidth, newHeight);
g.Dispose();
using (MemoryStream ms = new MemoryStream())
{
newImage.Save(ms, ImageFormat.Png);
outputFile = ms.GetBuffer();
}
}
LogInfo.Error(" outputFile="+ outputFile.Length);
return true;
}
catch(Exception ex)
{
LogInfo.Error(" ", ex);
return false;
}
}
asp.net指定サイズサムネイルを生成
ASP.NETでサムネイルを生成するコード