首页 文章

如何根据随机图像的设定比例裁剪图像?

提问于
浏览
1

致力于允许上传各种大小的图像,然后允许裁剪图像的预定义区域以用于缩略图 .

缩略图大小预定义为150x150 . 使用Jcrop.js工具选择图像的一部分 .

Problem:

通过在渲染图像上实现设置高度/宽度来显示比原始图像小的上载图像时,在选择要裁剪的区域时会有一个比例因子发挥作用 .

您必须按比例缩小裁剪区域,或者必须相对于实际图像的大小与其显示的大小相比缩放图像 .

Question:

如何计算浏览器显示图像与原始图像的比例?我目前正在使用以下代码来保存图像,但我如何考虑缩放?

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;
        }
    }

Bonus Question:

我发现的另一个问题是,在创建创建 ImageFormatMemoryBMP 的新Bitmap时,似乎没有有效的方法来传输原始文件的ImageFormat,当您尝试调用Bitmap.Save(memorystream,原始rawformat)时,它会爆炸 . 而位图RawFormat没有setter .

那么如何在新位图上设置格式呢?

1 回答

  • 0

    我想也许这个问题纯粹是在前端解决,不需要为此使用任何服务器端 .

    Jcrop有一个内置的比例因子处理程序 .

    http://deepliquid.com/content/Jcrop_Sizing_Issues.html

    现在你可以用两种方式使用它,正如我所理解的那样 . 要么使用“框大小调整”在前端为您“调整”图像,或者您可以告诉它图像的“真实”,它将计算出比例因子并为您自己处理坐标 .

    Box sizing

    $('#cropbox').Jcrop({ boxWidth: 450, boxHeight: 400 });
    

    True Size

    $.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;
    });
    

    祝好运!

相关问题