我正在使用JCrop
裁剪Image
。如果我向用户显示实际图像,它工作正常。但是,如果我显示调整大小Image
而不是实际Image
,那么我将调整大小Co-ordinates
Image
。
然后,如何基于它裁剪Image
?在这里,我正在通过保存Image
的{{1}}路径。
简而言之,如果对于Image
,如果保存Image
大小,那么我将在基于CSS的小尺寸弹出窗口中显示它。所以,我会得到715 * 350
的小尺寸Co-ordinates
。我在主Image
上应用了这些Co-ordinates
。
我的代码:
Image
答案 0 :(得分:5)
您显示的代码用于调整大小,而不是用于裁剪(在Graphic.DrawImage()
调用中,您不关心裁剪坐标,只需应用目标宽度/高度)
要裁剪图像,您只需使用Bitmap.Clone()
方法即可。只需传递从JCrop
中提取的裁剪坐标即可。 (以下示例中为cropzone
)
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);
}
}
}
}
有关您的代码的一些建议:
SmoothingMode
,InterpolationMode
,PixelOffsetMode
参数无用。 MemoryStream
,您最好在using
声明中使用它。它避免了对Close()
和Dispose()
的手动调用,并保证无论发生什么事情都会调用它们。关于Flush()
方法,MemoryStream
类上的just does nothing。答案 1 :(得分:1)
Jcrop拥有tureSize
属性。
$.Jcrop('#image',{ trueSize: [715, 350] });
你应该得到大图像的正确坐标。