允许上传各种尺寸的图像,然后允许为缩略图裁剪图像的预定义区域。
缩略图大小预定义为150x150。使用Jcrop.js工具选择图像的一部分。
问题:
通过在渲染的图像上实现设置的高度/宽度,以比原始图像小的尺寸显示上传的图像时,在选择要裁剪的区域时会有一个比例因子发挥作用。
您必须按比例缩小裁剪区域,或者必须相对于实际图像的尺寸与其显示的尺寸相比缩放图像。
问题:
如何计算浏览器显示图像与原始图像的比例?我目前正在使用以下代码保存图像,但我如何考虑缩放?
public static Image CropImage(Image originalImage, int x, int y, int width, int height)
{
var bmp = new Bitmap(width, height);
bmp.SetResolution(originalImage.HorizontalResolution, originalImage.VerticalResolution);
using (var graphic = Graphics.FromImage(bmp))
{
graphic.SmoothingMode = SmoothingMode.AntiAlias;
graphic.InterpolationMode = InterpolationMode.HighQualityBicubic;
graphic.PixelOffsetMode = PixelOffsetMode.HighSpeed;
graphic.DrawImage(originalImage, new Rectangle(0, 0, width, height), x, y, width, height, GraphicsUnit.Pixel);
return bmp;
}
}
奖金问题:
我发现的另一个问题是,在创建创建ImageFormatMemoryBMP
的新Bitmap以及尝试调用Bitmap.Save时,似乎没有有效的方法来传输原始文件的ImageFormat(memorystream,原始rawformat它会爆炸。而位图RawFormat没有setter。
那么如何在新位图上设置格式呢?
答案 0 :(得分:0)
我想也许这个问题纯粹是在前端解决,不需要为此使用任何服务器端。
Jcrop有一个内置的比例因子处理程序。
http://deepliquid.com/content/Jcrop_Sizing_Issues.html
现在你可以用两种方式使用它,据我所知。要么使用“框大小调整”在前端“调整”图像,或者你可以告诉它图像的“真实”,它将计算出比例因子并为你自己处理坐标。 / p>
大小调整
$('#cropbox').Jcrop({ boxWidth: 450, boxHeight: 400 });
真实尺寸
$.Jcrop('#cropbox',{ trueSize: [500,370] });
使用true size方法,您需要使用api方法调用jcrop: http://deepliquid.com/content/Jcrop_API.html#API_Invocation_Method
var jcrop_api,
options = { trueSize: [500,370] };
$('#target').Jcrop(options,function(){
jcrop_api = this;
});
祝你好运!