【问题标题】:Saving an image that's been rotated保存已旋转的图像
【发布时间】:2015-11-18 10:50:48
【问题描述】:

我正在使用Croppic 来裁剪、旋转和保存图像。但是我不确定如果图像被旋转了如何保存。当我保存图像时,在我旋转 90 度后,它仍然以原始方向保存。我怀疑这是我保存图像的方式,但不确定。

这是我保存裁剪/旋转图像的方法。我猜这就是我保存图像的方式,因为我可以在我的文件夹中看到裁剪后的图像没有正确旋转,但已经应用了裁剪。

[HttpPost]
public string CroppedImage(string imgUrl, int imgInitW, int imgInitH, double imgW, double imgH, int imgY1, int imgX1, int cropH, int cropW)
{
    var originalFilePath = Server.MapPath(imgUrl);
    var fileName = CropImage(originalFilePath, imgInitW, imgInitH, (int)imgW, (int)imgH, imgY1, imgX1, cropH, cropW);
    var result = new
    {
        status = "success",
        url = "../Cropped/" + fileName
    };

    return JsonConvert.SerializeObject(result);
}

private string CropImage(string originalFilePath, int origW, int origH, int targetW, int targetH, int cropStartY, int cropStartX, int cropW, int cropH)
{
    var originalImage = Image.FromFile(originalFilePath);

    var resizedOriginalImage = new Bitmap(originalImage, targetW, targetH);
    var targetImage = new Bitmap(cropW, cropH);

    using (var g = Graphics.FromImage(targetImage))
    {
        g.DrawImage(resizedOriginalImage, new Rectangle(0, 0, cropW, cropH), new Rectangle(cropStartX, cropStartY, cropW, cropH), GraphicsUnit.Pixel);
    }
    string fileName = Path.GetFileName(originalFilePath);
    var folder = Server.MapPath("~/Cropped");
    string croppedPath = Path.Combine(folder, fileName);
    targetImage.Save(croppedPath);

    return fileName;

}

控制器输入在这里定义,如果我旋转,我看到 imgX1 和 imgY1 有不同的值。我只是不知道如何在 C# 中正确保存它。

【问题讨论】:

  • 你说的保存在原来的方向。庄稼呢?作物应用了吗?
  • 是的,裁剪已应用。但旋转不是。我正在尝试确定是我保存它的方式还是与 Croppic 有什么关系?
  • 我看到了一个 g.RotateTransform(90);但是我怎么知道图像是否已经旋转?进入控制器的数据的唯一区别是 imgX1/imgY1 数据,如果我旋转 90 度,我会得到 140/101 的值,如果我不旋转,我会得到 15/70 的值。

标签: c# asp.net-mvc image-processing image-rotation croppic


【解决方案1】:

当您裁剪 Croppic 文档中缺少的图像时,会向服务器发布一个旋转参数。这将告诉您图像已旋转了多少度。

[HttpPost]
public string CroppedImage(string imgUrl, int imgInitW, int imgInitH, 
   double imgW, double imgH, int imgY1, int imgX1, 
   int cropH, int cropW, int rotation)
{

}

而且,您可以使用answer 中的代码来旋转图像。

【讨论】:

  • 太棒了,但尝试 g.RotateTransform(rotation);保存时仍然不旋转图像。
  • 我不知道你指的是什么g.RotateTransform()。您是否使用了我答案中链接中的代码?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-03
  • 1970-01-01
  • 1970-01-01
  • 2012-06-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多