新客网WWW.XKER.COM:致力做中国最专业的网络学院!
学院: 操作系统 - 网络应用 - 服务器 - 网络安全 - 工具软件 - 办公软件 - Web开发 - 数据库 - 网页设计 - 图形图像 - 媒体动画 - 硬件学堂 - 存储频道 - QQ专区
您的位置:首页 > 软件开发 > .Net开发 > Asp.net教程 > 正文:照片生成缩略图时的尺寸计算

照片生成缩略图时的尺寸计算

新客网 XKER.COM 2007-12-19 来源: 收藏本文
为了能保持住照片在缩小时不变形,所以需要重新计算缩略图的尺寸. 这里默认缩略图的尺寸的应该满足 长 >= 宽, 否则计算规则应有所变化.

今天突然想明白了,记在这里以后备用.
///
/// 取得缩略图的尺寸
///
/// 原始尺寸
/// 目标尺寸
///
public static Size GetSacaledSize(Size oldSize, Size desiredSize)
{
if (oldSize.Height == 0    oldSize.Width == 0)
throw new Exception("The pic's width and height not set.");

Size outSize = new Size();
bool flag = false;

//如果宽> 长,则按宽缩放 width = DesiredWidth.
//如果 宽<= 长. 则按长缩放 height = DesiredHeight.

if (oldSize.Width <= desiredSize.Width && oldSize.Height <= desiredSize.Height)
{
outSize = oldSize;
flag = true;
}

if (!flag)
{
if (oldSize.Width > oldSize.Height)
{
outSize.Width = desiredSize.Width;
double ratio = (double)desiredSize.Width / oldSize.Width;
outSize.Height = Convert.ToInt32(oldSize.Height * ratio);
flag = true;
}
}

if (!flag)
{
outSize.Height = desiredSize.Height;
double ratio = (double)desiredSize.Height / oldSize.Height;
outSize.Width = Convert.ToInt32(oldSize.Width * ratio);
}


return outSize;
}

这里是单元测试代码:

///
/// 这个测试用来测试在几种不同尺寸下面的缩略图尺寸算法的问题.
///
[TestFixture]
public class PhotoCacheTestFixture
{
[Test]
public void CacheSizeTest()
{
Photos p = new Photos();

//常见情况, 长大于宽的尺寸.
p.PhotoHeight = 1200;
p.PhotoWidth = 1600;

Size sizeSacled = p.SacledSize(ScaledPicSize.Instance.Size130x130);

Console.WriteLine("1600X1200");
Console.WriteLine(sizeSacled.Width);
Console.WriteLine(sizeSacled.Height);
Console.WriteLine("++++++++++++++++++");

Assert.IsTrue(sizeSacled.Width <= 130);
Assert.IsTrue(sizeSacled.Height <= 130);

//原图比缩略图尺寸还小的情况.直接返回原尺寸.
p.PhotoWidth = 100;
p.PhotoHeight = 80;

Size size2 = p.SacledSize(ScaledPicSize.Instance.Size130x130);

Console.WriteLine("100X80");
Console.WriteLine(size2.Width);
Console.WriteLine(size2.Height);
Console.WriteLine("++++++++++++++++++");


Assert.IsTrue(size2.Width <= 130);
Assert.IsTrue(size2.Height <= 130);

// 长版的图片尺寸.

p.PhotoWidth = 80;
p.PhotoHeight = 140;

Size size3 = p.SacledSize(ScaledPicSize.Instance.Size130x130);

Console.WriteLine("80X140");
Console.WriteLine(size3.Width);
Console.WriteLine(size3.Height);
Console.WriteLine("++++++++++++++++++");

Assert.IsTrue(size3.Width <= 130);
Assert.IsTrue(size3.Height <= 130);
}
}
收藏】 【评论】 【推荐】 【投稿】 【打印】 【关闭
发表评论
要记得去论坛讨论,点击注册新会员匿名评论
评论内容:不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
阅读排行
随机推荐
实用信息推荐