算法有助于动态生成图像

时间:2011-01-21 06:50:50

标签: c# image algorithm

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

更新:我需要帮助的是,如何计算以下每种方案的缩放比例。例如。如果我有一个60x60的缩略图占位符,原始图像是400x300,我必须设置300到60并相应地更改400。

帮助器看起来像这样:

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

M是Mode,我猜需要决定它是否应该使用宽度或高度来计算..这些是场景:

Thumnails(square):宽度和高度相同,因此它应该使用最短的图像尺寸。

ImagePlaceholder(主要是矩形): 静态高度/宽度。图像需要填充高度/宽度,因此占位符中不会有任何空白区域。其中一个维度过多的东西将被裁剪掉。如果宽度!=高度确定它是否为正方形,可能可以与缩略图组合使用,只检查尺寸。

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

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

2 个答案:

答案 0 :(得分: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);

我认为有blitting函数需要两个图像和两个矩形。使用其中之一。

答案 1 :(得分:0)

  1. 将网址中的图片加载到byte[]
  2. Image
  3. 创建byte[]
  4. 操纵Image
  5. Image保存到磁盘并通过网络处理程序直接提供网址或流
  6. byte[]可以替换为Stream