I am using JCrop
to Crop Image
. It is working fine if I show Actual Image to user. But, If I show Resize Image
rather than Actual Image
then I am getting Co-ordinates
of Resize Image
.
Then, How do I Crop Image
based on it ? Here, I am passing Image
path of Saved Image
.
In short, If Saved Image
size if for i.e. 715 * 350
then I am showing it in popup in Small Size based on CSS. So, I will get Co-ordinates
of that Small Size Image
. and I am applying those Co-ordinates
on Main Image
.
My Code:
using (System.Drawing.Image OriginalImage = System.Drawing.Image.FromFile(Img))
{
using (System.Drawing.Bitmap bmp = new System.Drawing.Bitmap(Width, Height))
{
bmp.SetResolution(OriginalImage.HorizontalResolution, OriginalImage.VerticalResolution);
using (System.Drawing.Graphics Graphic = System.Drawing.Graphics.FromImage(bmp))
{
Graphic.SmoothingMode = SmoothingMode.AntiAlias;
Graphic.InterpolationMode = InterpolationMode.HighQualityBicubic;
Graphic.PixelOffsetMode = PixelOffsetMode.HighQuality;
Graphic.DrawImage(OriginalImage, new System.Drawing.Rectangle(0, 0, Width, Height), X, Y, Width, Height, System.Drawing.GraphicsUnit.Pixel);
MemoryStream ms = new MemoryStream();
bmp.Save(ms, OriginalImage.RawFormat);
ms.Close();
ms.Flush();
ms.Dispose();
return ms.GetBuffer();
}
}
}
The code you show is made for resizing, not for cropping (In the Graphic.DrawImage()
call, you don't care about the cropping coordinates, and just apply a destination Width/Height)
For cropping an image, you can just use the Bitmap.Clone()
method. Just pass to it the cropping coordinates you extracted from JCrop
. (cropzone
in the following example)
public static async Task CropImage()
{
var client = new WebClient();
var sourceimg = new Uri(@"http://logonoid.com/images/stack-overflow-logo.png");
var destination = new FileInfo(Path.Combine(Directory.GetCurrentDirectory(), "logoCropped.png"));
if (destination.Exists)
destination.Delete();
using (Stream sourceStream = await client.OpenReadTaskAsync(sourceimg))
{
using (Bitmap source = new Bitmap(sourceStream))
{
Rectangle cropzone = new Rectangle(0, 0, 256, 256);
using (Bitmap croppedBitmap = source.Clone(cropzone, source.PixelFormat))
{
croppedBitmap.Save(destination.FullName, ImageFormat.Png);
}
}
}
}
Some advices about your code :
SmoothingMode
, InterpolationMode
, PixelOffsetMode
parameters are useless here. MemoryStream
, you should better use it in a using
statement. It avoids manual calls to Close()
and Dispose()
, and guaranty they're called whatever happens. And about the Flush()
method, it just does nothing on the MemoryStream
class.Jcrop has tureSize
property.
$.Jcrop('#image',{ trueSize: [715, 350] });
you should get the correct coordinates of the large image.
http://deepliquid.com/content/Jcrop_Sizing_Issues.html
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With