ASP.NET輸出PNG圖片時出現(xiàn)GDI+一般性錯誤的解決方法
更新時間:2009年01月10日 02:14:36 作者:
偶原來的用ASP.NET生成驗證碼圖片時用的是JPG格式,今天想把它改成PNG格式的,結果就出現(xiàn)GDI+一般性錯誤,查了N久資料,才發(fā)現(xiàn)解決的辦法,對分享此解決辦法的網(wǎng)友深表感謝
以下是原文:
Code:
Response.Clear();
Response.ContentType = "image/PNG";
img.Save(Response.OutputStream, ChartFormat.Png);
竟然出現(xiàn)異常,是GDI+一般性錯誤。但是如果格式是
Code:
Response.ContentType = "image/jpeg";
就不會報錯。
好在以前遇到過,改成
Code:
Response.ContentType = "image/PNG";
using (MemoryStream ms = new MemoryStream())
{
img.Save(ms, ChartFormat.Png);
Response.OutputStream.Write(ms.GetBuffer(), 0, (int)ms.Length);
}
就可以輸入png圖片了。
這是由于Response.OutputStream這個流的無法往回讀取造成的,也就是它的CanSeek屬性
是false。png圖像生成的時候不像jpeg,不是流式的,已經寫入的就不再管了,而是需要往回
不斷地寫入結構數(shù)據(jù)。但是response流無法往回seek,所以直接用就不行了。改成一個可以
seek的MemoryStream,先生成好png圖片,然后再輸出到response流。
Code:
復制代碼 代碼如下:
Response.Clear();
Response.ContentType = "image/PNG";
img.Save(Response.OutputStream, ChartFormat.Png);
竟然出現(xiàn)異常,是GDI+一般性錯誤。但是如果格式是
Code:
復制代碼 代碼如下:
Response.ContentType = "image/jpeg";
就不會報錯。
好在以前遇到過,改成
Code:
復制代碼 代碼如下:
Response.ContentType = "image/PNG";
using (MemoryStream ms = new MemoryStream())
{
img.Save(ms, ChartFormat.Png);
Response.OutputStream.Write(ms.GetBuffer(), 0, (int)ms.Length);
}
就可以輸入png圖片了。
這是由于Response.OutputStream這個流的無法往回讀取造成的,也就是它的CanSeek屬性
是false。png圖像生成的時候不像jpeg,不是流式的,已經寫入的就不再管了,而是需要往回
不斷地寫入結構數(shù)據(jù)。但是response流無法往回seek,所以直接用就不行了。改成一個可以
seek的MemoryStream,先生成好png圖片,然后再輸出到response流。
相關文章
asp.net程序在調式和發(fā)布之間圖片路徑問題的解決方法
圖片顯示的時候,在VS調式時候,地址中有個虛擬文件名,發(fā)布后則沒有了.所以會有圖片顯示叉叉的情況.2009-12-12
.NET6環(huán)境下實現(xiàn)MQTT通信及詳細代碼演示
本文詳細講解了.NET6環(huán)境下實現(xiàn)MQTT通信的方法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-07-07
asp.net 驗證字符串是否為純數(shù)字檢測函數(shù)
如何驗證字符串是否為純數(shù)字2010-03-03
ASP.NET Core 7 Razor Pages項目發(fā)布到IIS的詳細過程
這篇文章主要介紹了ASP.NET Core 7 Razor Pages項目發(fā)布到IIS的詳細過程,詳細介紹了發(fā)布過程遇到的問題及解決方法,對ASP.NET Core 發(fā)布到IIS相關知識感興趣的朋友一起看看吧2023-01-01
利用Typings為Visual Studio Code實現(xiàn)智能提示功能
最近在學習Node.js及ThinkJS這個框架,用vscode作為開發(fā)環(huán)境。默認情況下vscode對ThinkJS的代碼提示并不好,所以研究了一下,原來可以同通過Typings來讓vscode擁有強大的智能代碼提示功能。下面本文就介紹了如何利用Typings為Visual Studio Code實現(xiàn)智能提示功能。2017-02-02

