上传图片时等比缩放的一个小小算法

protected void Button1_Click(object sender, EventArgs e)
       {
           int width = 300, height = 300;//生成缩略图时定义一个最大的宽和高
           System.Drawing.Image img = System.Drawing.Image.FromFile("d:/test.jpg");
           int swidth =img.Width;//源图片的宽
           int sheight = img.Height;//源图片的高
           var info = new SImg
           {
               width = swidth,
               height = sheight
           };
           info.GetHW(width, height, info);
           //得到缩放后的宽和高
           int w = info.width;
           int h = info.height;
           //获取缩略图
           System.Drawing.Image smallimg = img.GetThumbnailImage(w, h, new System.Drawing.Image.GetThumbnailImageAbort(() => { return false; }), IntPtr.Zero);  
       }

       public class SImg
       {
           public int width { get; set; }
           public int height { get; set; }

           public void GetHW(int width, int height, SImg img)
           {
               //如果宽和高任意一个超过定义的宽和高 执行等比
               if (img.width > width || img.height > height)
               {
                   img.width = img.width / 2;
                   img.height = img.height / 2;
                   GetHW(width, height, img);
               }
           }

       }

Image.GetThumbnailImage 方法

public Image GetThumbnailImage (
	int thumbWidth,
	int thumbHeight,
	GetThumbnailImageAbort callback,
	IntPtr callbackData
)

参数

thumbWidth

请求的缩略图的宽度(以像素为单位)。

thumbHeight

请求的缩略图的高度(以像素为单位)。

callback

一个 Image.GetThumbnailImageAbort 委托。在 GDI+ 1.0 版中不使用此委托。即便如此,也必须创建一个委托并在该参数中传递对此委托的引用。

callbackData

必须为 Zero

时间: 2024-11-03 21:22:06

上传图片时等比缩放的一个小小算法的相关文章

wordpress上传图片时重命名--修改插件时遇到的一些问题

wordpress是用php语言开发的博客平台,它扩展性强,容易扩展,很适合拿来做二次开发. 1,问题由来 本周五,我在浏览公司的网站(基于wordpress开发)时发现,网站首页上有两篇文章的缩略图重复了,于是我进入网站后台检查,想看下是不是某位员工在撰写文章时不小心这两篇文章选择了相同的图片作为封面图片. 结果发现这两篇文章选用的封面图片的文件名还真是相同,但我转念又想到,员工再糊涂也不至于犯这样的错误.于是,我检查了下这几篇文章的封面图片url地址,这些地址是相同的. 我想到,有可能是这两

百度编辑器 Ueditor 上传图片时打开文件夹的延迟问题,点击上传图片弹窗打开慢问题

在使用 ueditor 开发时, 作为一个web文本编辑器使用时. 当点击上传图片时, 文件夹要延迟好久才能打开. 解决: 针对多图片上传, 将/ueditor/dialogs/image/image.js 文件下的以下代码 1 2 3 4 5 accept: {                     title: 'Images',                     extensions: acceptExtensions,                     mimeTypes:

关于创建主键和索引的关系一个小小测试

创建主键时,所对应的列如果没有索引,数据库默认会自动创建一个索引:如果对于列有索引,那么创建主键不会再创建索引.这里要注意,列值必须满足主键的要求(唯一,非空),简单测试如下: SQL> create table wxlun_pri(a number); Table created. SQL> alter table wxlun_pri add constraint PRIMARY_KEY_REPLY primary key (a);     ------创建主键约束 Table altere

关于 百度 Ueditor (在chrome浏览器) 上传图片时 打开文件夹的延迟问题

在使用 ueditor 开发时, 作为一个web文本编辑器使用时. 当点击上传图片时, 文件夹要延迟好久才能打开. 解决: 针对多图片上传, 将/ueditor/dialogs/image/image.js 文件下的以下代码 accept: { title: 'Images', extensions: acceptExtensions, mimeTypes: 'image/*' }, 改为 accept: { title: 'Images', extensions: acceptExtensio

关于逻辑或的一个小小应用注意点

这两天在完成一个新的项目,由于是新的,所以,很多都是重新写的,其中发现自己犯了一个比较低级的错误,弄了大半天,原来是写的格式错误,具体如下,希望其他博友不要和我一样,导致浪费时间在修改BUG,更重要的是影响心情. 主要目的: 如果 A 等于 6 或者 A 等于 8 ,B等于 9 否则 B 等于 10: 当然,以上是我简化后的表达. 错误写法: if(A == (6 || 8)) { B= 9; } else { B = 10; } 正确写法: if((A == 6) || (A ==  8))

Web Uploader初始化隐藏容器失败及点击上传图片时反应较慢的问题

问题1:在一个页面集成一个或者多个文件上传插件,初始化时有些DOM容器是隐藏的,这时候经常会出现初始化失败的情况,虽然按钮样式改变了,但是点击就是没反应(有时候不经意点了哪个地方,或许会出现文件选择框),仔细看了一下,发现了问题所在,如下图: 实例化的时候,会在初始选定的选择按钮上生成一层"label"遮罩层,点击事件也是绑定在label上,但如果实例化时,指定的DOM是隐藏的(display:none)话,只能生成1x1的遮罩,而点击事件依然绑定在label上,始终点击不到,当然也就

图片延迟加载并等比缩放,一个简单的JQuery插件

使用方法: $(".viewArea img").zoom({height:74,width:103}); (function($){    $.fn.zoom = function(settings){                //一些默认配置:                settings = $.extend({                    height:0,                    width:0,                    load

在ASP.NET MVC中使用NuGet添加SignalR类库之后,再次运行程序时,它出现了一个异常:

自从在ASP.NET MVC中使用NuGet添加SignalR类库之后,再次运行程序时,它出现了一个异常: Server Error in '/' Application. The following errors occurred while attempting to load the app.- No assembly found containing an OwinStartupAttribute.- No assembly found containing a Startup or [

EC笔记:第二部分:12、复制对象时勿忘其每一个成分

EC笔记:第二部分:12.复制对象时勿忘其每一个成分 1.场景 某些时候,我们不想使用编译器提供的默认拷贝函数(包括拷贝构造函数和赋值运算符),考虑以下类定义: 代码1: class Point{ private: double x; double y; public:         Point()=default; Point(const Point &other){ x=other.x; y=other.y; } const Point& operator=(const Point