📄 maxpicturesizemodule.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 + -