【问题标题】:How do I rotate an Image in .NET?如何在 .NET 中旋转图像?
【发布时间】:2011-06-25 02:49:50
【问题描述】:

我有一个 asp.net 2010 项目。我将 jpg 写入文件系统。然后我将它显示在图像控件中。然后我在按钮单击时使用此代码以允许用户将其旋转 90 度。

string path = Server.MapPath(Image1.ImageUrl) ;

// creating image from the image url
System.Drawing.Image i = System.Drawing.Image.FromFile(path);

// rotate Image 90' Degree
i.RotateFlip(RotateFlipType.Rotate90FlipXY);

// save it to its actual path
i.Save(path);

// release Image File
i.Dispose();

它确实会旋转(我实际上可以在 Windows 资源管理器中看到这种情况)。但是当我再次运行该应用程序并从其路径中获取文件时,它仍然以原始形式显示它。

【问题讨论】:

  • 按 F5,可能浏览器正在从缓存中拉取。
  • 实际上,按 F5 确实可以解决问题。我怎样才能以编程方式解决这个问题?我尝试重定向到同一页面以强制刷新,但没有成功。
  • 设置页面的缓存控制,而不是其中包含的图像
  • 我想建议更改标题:“如何在动态更改图像文件内容时绕过浏览器缓存?”您已经知道如何旋转图像;您想要的是如何让浏览器立即接受更改。

标签: asp.net image


【解决方案1】:

尝试在图像末尾添加一个虚拟查询字符串,例如“image1.jpv?v=1”。这可以防止缓存诸如 Javascript 文件之类的东西,它可能对您也有同样的作用。

【讨论】:

    【解决方案2】:

    这是浏览器缓存资源文件的典型问题。 Alison 的回答是一种选择。另一种选择是更改物理文件的名称。如果您对文件进行“版本化”,那么每次更改后,文件名都会不同。这确实意味着您必须动态引用图像路径以便显示正确的版本,并且您需要一些方法来确定当前版本的文件名。但是,它确实会阻止浏览器在更改后立即显示先前缓存的文件,因为从技术上讲,它在那时对浏览器来说是一个新文件。

    如果您使用某种数据源(XML 文件或数据库)来存储图像的元数据,那么您可以添加一个“版本”列并存储一个简单的整数。每次更改时,递增整数值并在文件名中使用新值。您甚至可以通过保存以前的版本并允许您的用户通过将文件的旧版本复制到新版本来“撤消”操作来扩展它。不过,这可能需要更强大的元数据存储实现。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-09-03
      • 2017-04-14
      • 2016-02-04
      • 2015-04-04
      • 2016-07-20
      • 2021-11-30
      • 2011-07-20
      • 1970-01-01
      相关资源
      最近更新 更多