偶原來(lái)的用ASP.NET生成驗(yàn)證碼圖片時(shí)用的是JPG格式,今天想把它改成PNG格式的,結(jié)果就出現(xiàn)GDI+一般性錯(cuò)誤,查了N久資料,才發(fā)現(xiàn)解決的辦法,對(duì)分享此解決辦法的網(wǎng)友深表感謝
Response.Clear();Response.ContentType = "image/PNG";img.Save(Response.OutputStream, ChartFormat.Png);竟然出現(xiàn)異常,是GDI+一般性錯(cuò)誤。但是如果格式是Response.ContentType = "image/jpeg";就不會(huì)報(bào)錯(cuò)。好在以前遇到過(guò),改成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這個(gè)流的無(wú)法往回讀取造成的,也就是它的CanSeek屬性是false。png圖像生成的時(shí)候不像jpeg,不是流式的,已經(jīng)寫(xiě)入的就不再管了,而是需要往回不斷地寫(xiě)入結(jié)構(gòu)數(shù)據(jù)。但是response流無(wú)法往回seek,所以直接用就不行了。改成一個(gè)可以seek的MemoryStream,先生成好png圖片,然后再輸出到response流。
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注