在asp.net中使用ThoughtWorks.QRCode出现问题,生成的图片发送前台不能显示。
QRCodeEncoder qrCodeEncoder = new QRCodeEncoder();
qrCodeEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE;
qrCodeEncoder.QRCodeScale = 4;
qrCodeEncoder.QRCodeVersion = 7;
qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.M;
Bitmap img = qrCodeEncoder.Encode("123456");
MemoryStream ms = new MemoryStream();
img.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);
context.Response.ClearContent();
context.Response.ContentType = "image/Gif";
context.Response.Write(ms.ToArray());
context.Response.End();
我想应该和验证码生成一样的才对,用一个image控件引入生成页面链接,但是窝的就是显示不粗来,是哪里出错了?表示生成的图片用windowsform的控件查看是显示正常的说。。。。
QRCodeEncoder qrCodeEncoder = new QRCodeEncoder();
qrCodeEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE;
qrCodeEncoder.QRCodeScale = 4;
qrCodeEncoder.QRCodeVersion = 7;
qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.M;
Bitmap img = qrCodeEncoder.Encode("123456");
MemoryStream ms = new MemoryStream();
img.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);
context.Response.ClearContent();
context.Response.ContentType = "image/Gif";
context.Response.BinaryWrite(ms.ToArray());//这里的Write改成BinaryWrite即可
context.Response.End();
把图片格式改了就正常了。。。
/// <summary>
/// 含有QR码的描述类和包装编码和渲染
/// </summary>
public static class QRCodeHelper
{
/// <summary>
/// 获取二维码
/// </summary>
/// <param name="ms">输出流</param>
/// <param name="strContent">待编码的字符</param>
///<returns>True if the encoding succeeded, false if the content is empty or too large to fit in a QR code</returns>
public static bool GetQRCode(MemoryStream ms, string strContent, int size)
{
ErrorCorrectionLevel Ecl = ErrorCorrectionLevel.M; //误差校正水平
string Content = strContent;//待编码内容
QuietZoneModules QuietZones = QuietZoneModules.Two; //空白区域
var encoder = new QrEncoder(Ecl);
QrCode qr;
if (encoder.TryEncode(Content, out qr))//对内容进行编码,并保存生成的矩阵
{
var render = new GraphicsRenderer(new FixedModuleSize(size, QuietZones));
render.WriteToStream(qr.Matrix, ImageFormat.Png, ms);
}
else
{
return false;
}
return true;
}
}
public void ProcessRequest(HttpContext context)
{
var str = context.Request.Params["s"];
var size = context.Request.Params["size"].ToInt(12);
using (var ms = new MemoryStream())
{
QRCodeHelper.GetQRCode(ms, str, size);
context.Response.OutputStream.Write(ms.GetBuffer(), 0, (int)ms.Length);
}
context.Response.ContentType = "image/png";
context.Response.End();
}