⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 maxpicturesizemodule.cs

📁 本系统是在asp版《在线文件管理器》的基础上设计制作
💻 CS
字号:
//------------------------------------------------------------------------------
// <copyright company="Telligent Systems">
//     Copyright (c) Telligent Systems Corporation.  All rights reserved.
// </copyright> 
//------------------------------------------------------------------------------

using System;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging;
using System.IO;
using System.Xml;
using CommunityServer.Components;

namespace CommunityServer.Galleries.Components
{
	/// <summary>
	/// Summary description for MaxPictureSizeModule.
	/// </summary>
	public class MaxPictureSizeModule : ICSModule
	{

		#region Private Members

		private int maxWidth = 1024;
		private int maxHeight = 768;
		private int quality = 90;

		#endregion

		public MaxPictureSizeModule() { }

		public void Init(CSApplication csa, XmlNode node)
		{
			if(node.Attributes["maxWidth"] != null)
				maxWidth = int.Parse(node.Attributes["maxWidth"].Value);

			if(node.Attributes["maxHeight"] != null)
				maxHeight = int.Parse(node.Attributes["maxHeight"].Value);

			if(node.Attributes["quality"] != null)
				quality = int.Parse(node.Attributes["quality"].Value);

			csa.PrePostUpdate += new CSPostEventHandler(csa_BeforeProcessPost);
		}

		private void csa_BeforeProcessPost(Post post, CSEventArgs e)
		{
			Picture picture = post as Picture;

			if(picture == null)
				return;

			// Check the filesize
			if(picture.Width > maxWidth || picture.Height > maxHeight)
			{
				GalleryImageSettings settings = new GalleryImageSettings(maxWidth, maxHeight, quality, true);
				ImageHandling.GetMaintainedRatio(picture, settings);

				MemoryStream originalStream = new MemoryStream();
				originalStream.Write(picture.PictureData.Content, 0, picture.PictureData.Content.Length);
				originalStream.Position = 0;
				Bitmap image = (Bitmap)Bitmap.FromStream(originalStream, true);

				// We got here, so we do want to scale it.
				Graphics graph;
				Bitmap bitmap = new Bitmap(settings.Width, settings.Height);
				graph = Graphics.FromImage(bitmap);
				graph.InterpolationMode = InterpolationMode.HighQualityBicubic;
				graph.DrawImage(image, 0, 0, settings.Width, settings.Height);

				// specify codec
				ImageCodecInfo codec = ImageHandling.GetEncoderInfo("image/jpeg");

				// set image quality
				EncoderParameters eps = new EncoderParameters(1);
				eps = new EncoderParameters();
				eps.Param[0] = new EncoderParameter(Encoder.Quality, (long)settings.Quality);

				// Save it
				/*MemoryStream stream2 = new MemoryStream();
				bitmap.Save(stream2, codec, eps);
				pictureData.Length = (int) stream2.Length;
				pictureData.Content = new byte[stream2.Length];
				stream2.Read(pictureData.Content, 0, (int)stream2.Length);
				stream2.Close();*/

				string filename = Picture.CacheDirectory() + Guid.NewGuid().ToString();
				bitmap.Save(filename, codec, eps);

				FileStream scaledStream = new FileStream(filename, FileMode.Open);
				picture.PictureData.Length = (int)scaledStream.Length;
				picture.PictureData.Content = new byte[scaledStream.Length];
				scaledStream.Read(picture.PictureData.Content, 0, picture.PictureData.Length);
				scaledStream.Close();

				File.Delete(filename);

				bitmap.Dispose();
				graph.Dispose();
				eps.Dispose();
				image.Dispose();
				picture.Width = settings.Width;
				picture.Height = settings.Height;
				picture.ImageSize = picture.PictureData.Length;
			}
		}
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -