コードを使用したサムネイルの自動生成

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でサムネイルを生成するコード