2011-01-21 36 views
1

我希望创建图像生成的帮手。我们将把它添加到C#解决方案中。然而,我不是后端开发人员,所以我只是创建一个虚拟示例并用我自己的话在这里解释:-)动态生成图像的算法帮助

更新:我需要帮助,是如何计算每个下面的情景。例如。如果我有一个60x60的缩略图占位符,并且原始图像是400x300,则必须将300设置为60,并相应地更改400。

的帮手会是这个样子:

HelperName('OriginalImageUrl', 'FileName', X, Y, M) 

M为模式,我的猜测是需要决定是否应该使用宽度或高度从..计算这些场景:

Thumnails(方形):宽度和高度是相同的,所以它应该使用最短的图像尺寸。

ImagePlaceholder(大多为长方形): 静态高度/宽度。图像需要填充高度/宽度,所以不会是占位符中的任何空白区域。其中一个维度过多的部分将被裁剪。如果宽度!=高度以确定其是否为正方形,可能可以与缩略图组合使用。

PhotoWrapper: 最大高度/宽度。整个图像将被调整以适应这些比例。没有裁剪,只是基本调整大小以适应2个给定的容器尺寸。

如果有人能够帮助我,或者知道我可以使用的插件,那就太棒了。

+0

目前还不清楚问题是什么? – 2011-01-21 06:54:38

+0

你不确定什么?如何使界面操纵这个?还是具体实施?此外,我们不是在这里做你的支持,所以你应该至少尝试搜索并尝试自己制定解决方案。那么如果你有具体的问题问我们。 – Euphoric 2011-01-21 07:52:48

回答

2

您可以计算比例因子,然后计算输入/输出矩形。如果是这样(没有测试):

配件:

double scaleX=(double)targetWidth/(double)originalWidth; 
double scaleY=(double)targetHeight/(double)originalHeight; 

double scaleToFit=Math.Min(scaleX,scaleY); 

double newWidth=scaleToFit*originalWidth; 
double newHeight=scaleToFit*originalHeight; 

double borderX=(targetWidth-newWidth)/2; 
double borderY=(targetHeight-newHeight)/2; 

Rect InputRect=new Rect(0,0,originalWidth,originalHeight); 
Rect OutputRect=new Rect(borderX,borderY,targetWidth-2*borderX,targetHeight-2*borderY); 

灌装:

double scaleX=(double)targetWidth/(double)originalWidth; 
double scaleY=(double)targetHeight/(double)originalHeight; 

double scaleToFill=Math.Max(scaleX,scaleY); 

double oldWidth=targetWidth/scaleToFill; 
double oldHeight=targetHeight/scaleToFill; 

double cropX=(originalWidth-oldWidth)/2; 
double cropY=(originalHeight-oldHeight)/2; 

Rect OutputRect=new Rect(0,0,targetWidth,targetHeight); 
Rect InputRect=new Rect(cropX,cropY,oldWidth,oldHeight); 

我认为有阻击器内搭的两个图像的功能,以及两个矩形。使用其中之一。

0
  1. 负载从URL中的图像转换为byte[]
  2. 创建一个从byte[]
  3. Image操纵Image
  4. 保存Image到磁盘和服务的网址或通过网络处理直接流

byte[]可替换为Stream