上传图片方向问题
uploaded image orientation issues
我整天都在寻找解决方案,但似乎找不到合适的解决方案。
问题(我认为)很简单。当图片上传到我的页面时,它会显示在 img 元素中。现在由于某种原因,它自己从纵向旋转到横向。
我切断了中间人并将 img 标签连接到路径。
问题仍然存在。
如果我在 ps 中打开它并将其另存为新的 jpeg,它是固定的,但这不是一个可行的选择,因为图像将直接从客户端上传。
在其他程序(ps、paint、photos、photos3d)中是否存在该问题
在我的挖掘中,我发现这可能是由图像的 exif 数据引起的。
其他一切都会忽略该数据,或者正确读取它。
谁能告诉我如何解决这个问题?
我尝试添加 image-orientation:0deg 和 image-orientation:from-image 没有结果。
此外,为了我的理智,有谁知道为什么这会是个问题?
编辑这不会发生在 firefox 上。话虽这么说,我不能强迫每个人都避免chrome
提前致谢
好的,所以我四处寻找并找到了一些旋转图像客户端的方法并添加了 css 以使其看起来合法。然后我意识到所有这些都被浪费了,因为它会导致图像在正确显示它的浏览器中过度旋转。
最终将它带到服务器端并在那里修复它(基于 exif 旋转并删除 exif 数据)
我会包含控制器代码
public JsonResult NormalizeOrientation(HttpPostedFileBase file)
{
Image img = Image.FromStream(file.InputStream);
if (Array.IndexOf(img.PropertyIdList, 274) > -1)
{
var orientation = (int)img.GetPropertyItem(274).Value[0];
switch (orientation)
{
case 1:
// No rotation required.
break;
case 2:
img.RotateFlip(RotateFlipType.RotateNoneFlipX);
break;
case 3:
img.RotateFlip(RotateFlipType.Rotate180FlipNone);
break;
case 4:
img.RotateFlip(RotateFlipType.Rotate180FlipX);
break;
case 5:
img.RotateFlip(RotateFlipType.Rotate90FlipX);
break;
case 6:
img.RotateFlip(RotateFlipType.Rotate90FlipNone);
break;
case 7:
img.RotateFlip(RotateFlipType.Rotate270FlipX);
break;
case 8:
img.RotateFlip(RotateFlipType.Rotate270FlipNone);
break;
}
// This EXIF data is now invalid and should be removed.
img.RemovePropertyItem(274);
}
MemoryStream ms = new MemoryStream();
img.Save(ms, ImageFormat.Jpeg);
return Json(new { base64imgage = Convert.ToBase64String(ms.ToArray()) }
, JsonRequestBehavior.AllowGet);
}
我整天都在寻找解决方案,但似乎找不到合适的解决方案。
问题(我认为)很简单。当图片上传到我的页面时,它会显示在 img 元素中。现在由于某种原因,它自己从纵向旋转到横向。 我切断了中间人并将 img 标签连接到路径。 问题仍然存在。
如果我在 ps 中打开它并将其另存为新的 jpeg,它是固定的,但这不是一个可行的选择,因为图像将直接从客户端上传。
在其他程序(ps、paint、photos、photos3d)中是否存在该问题
在我的挖掘中,我发现这可能是由图像的 exif 数据引起的。 其他一切都会忽略该数据,或者正确读取它。
谁能告诉我如何解决这个问题?
我尝试添加 image-orientation:0deg 和 image-orientation:from-image 没有结果。
此外,为了我的理智,有谁知道为什么这会是个问题?
编辑这不会发生在 firefox 上。话虽这么说,我不能强迫每个人都避免chrome
提前致谢
好的,所以我四处寻找并找到了一些旋转图像客户端的方法并添加了 css 以使其看起来合法。然后我意识到所有这些都被浪费了,因为它会导致图像在正确显示它的浏览器中过度旋转。
最终将它带到服务器端并在那里修复它(基于 exif 旋转并删除 exif 数据)
我会包含控制器代码
public JsonResult NormalizeOrientation(HttpPostedFileBase file)
{
Image img = Image.FromStream(file.InputStream);
if (Array.IndexOf(img.PropertyIdList, 274) > -1)
{
var orientation = (int)img.GetPropertyItem(274).Value[0];
switch (orientation)
{
case 1:
// No rotation required.
break;
case 2:
img.RotateFlip(RotateFlipType.RotateNoneFlipX);
break;
case 3:
img.RotateFlip(RotateFlipType.Rotate180FlipNone);
break;
case 4:
img.RotateFlip(RotateFlipType.Rotate180FlipX);
break;
case 5:
img.RotateFlip(RotateFlipType.Rotate90FlipX);
break;
case 6:
img.RotateFlip(RotateFlipType.Rotate90FlipNone);
break;
case 7:
img.RotateFlip(RotateFlipType.Rotate270FlipX);
break;
case 8:
img.RotateFlip(RotateFlipType.Rotate270FlipNone);
break;
}
// This EXIF data is now invalid and should be removed.
img.RemovePropertyItem(274);
}
MemoryStream ms = new MemoryStream();
img.Save(ms, ImageFormat.Jpeg);
return Json(new { base64imgage = Convert.ToBase64String(ms.ToArray()) }
, JsonRequestBehavior.AllowGet);
}