不裁剪所选区域

Posted

技术标签:

【中文标题】不裁剪所选区域【英文标题】:Not cropping the selected area 【发布时间】:2012-01-10 00:42:02 【问题描述】:

现在是裁剪部分:以正确的宽度、高度显示图像的不同部分。

要裁剪的区域

裁剪区域

这是我的 js 代码

        jQuery(document).ready(function () 

            jQuery('#imgCrop').Jcrop(

                onSelect: storeCoords,
                onChange: storeCoords 


            );

        );

      function storeCoords(c) 

    jQuery('#X').val(c.x);

    jQuery('#Y').val(c.y);

    jQuery('#W').val(c.w);
    jQuery('#H').val(c.h);

  ;

protected void btnCrop_Click(object sender, EventArgs e)


    string ImageName = Session["WorkingImage"].ToString();

    int w = Convert.ToInt32(W.Value);

    int h = Convert.ToInt32(H.Value);

    int x = Convert.ToInt32(X.Value);

    int y = Convert.ToInt32(Y.Value);



    byte[] CropImage = Crop(path + ImageName, w, h, x, y);

    using (MemoryStream ms = new MemoryStream(CropImage, 0, CropImage.Length))
    

        ms.Write(CropImage, 0, CropImage.Length);

        using (SD.Image CroppedImage = SD.Image.FromStream(ms, true))
        

            string SaveTo = path + "crop" + ImageName;

            CroppedImage.Save(SaveTo, CroppedImage.RawFormat);

            pnlCrop.Visible = false;

            pnlCropped.Visible = true;

            imgCropped.ImageUrl = "images/crop" + ImageName;

        

    


static byte[] Crop(string Img, int Width, int Height, int X, int Y)


    try
    

        using (SD.Image OriginalImage = SD.Image.FromFile(Img))
        

            using (SD.Bitmap bmp = new SD.Bitmap(Width, Height))
            

                bmp.SetResolution(OriginalImage.HorizontalResolution, OriginalImage.VerticalResolution);

                using (SD.Graphics Graphic = SD.Graphics.FromImage(bmp))
                

                    Graphic.SmoothingMode = SmoothingMode.AntiAlias;

                    Graphic.InterpolationMode = InterpolationMode.HighQualityBicubic;

                    Graphic.PixelOffsetMode = PixelOffsetMode.HighQuality;

                    Graphic.DrawImage(OriginalImage, new SD.Rectangle(0, 0, Width, Height), X, Y, Width, Height, SD.GraphicsUnit.Pixel);

                    MemoryStream ms = new MemoryStream();

                    bmp.Save(ms, OriginalImage.RawFormat);

                    return ms.GetBuffer();

                

            

        

    

    catch (Exception Ex)
    

        throw (Ex);

    


【问题讨论】:

您将不得不更好地解释这一点。你有什么问题?你试过什么?你想做什么? 我正在尝试裁剪图像。但是选择部分不起作用。如果您查看附件,叶子是选定的部分,但它显示了图像的某些部分。我尝试在这行代码中更改一些参数。 Graphic.DrawImage(OriginalImage, new SD.Rectangle(0, 0, Width, Height), X, Y, Width, Height, SD.GraphicsUnit.Pixel 【参考方案1】:

我曾经遇到过类似的问题,我现在不记得了,但我认为你必须在 jCrop 中设置boxWidth 选项,特别是如果你没有显示图像的原始尺寸(图像实际上是 1024x768,但你将裁剪器设置为 350x350)

您可能还必须为 jCrop 设置 aspectRatio,即使它是 01,因为它需要根据图像大小重新计算尺寸。 还要确保使用最新版本 0.9.9(截至本文)并检查 javascript 内部是否实际上是 0.9.9,因为有时他没有正确更新链接..它让我失望了......

我认为您的服务器代码没问题 - 但您需要检查隐藏字段中设置的数字是多少,以便您可以调试问题。

【讨论】:

以上是关于不裁剪所选区域的主要内容,如果未能解决你的问题,请参考以下文章

ENVI5.3数据裁剪——指定区域和shp裁剪

找到要裁剪的图像的矩形区域

如何在不裁剪的情况下查看矩形选框选定区域的大小?在 Photoshop CS 5 中

在Java中按多边形区域裁剪图像

使用 jCrop api 显示所选作物区域的坐标

php图片裁剪