C# 读取数据库 Image 字段,输出缩略图以及原图

  最近项目中用到了照片展示,开始做的是直接排列显示原图,无奈图片多了就卡的不行了,尤其Chrome,滚动条都动不了,只能改动了。。

  代码保存在这里,算是备忘,比较简单,就不加说明了。

 缩略图 

Show Thumbnail
<%@ WebHandler Language="C#" Class="ShowThumbnail" %>

using System;
using System.Web;
using Drision.Framework.Entity;
using System.IO;
using System.Drawing;
using Drision.Framework.Repository.EF;
using Drision.Framework.Web;
using Drision.Framework.Repository;
public class ShowThumbnail : IHttpHandler {

    public void ProcessRequest(HttpContext context)
    {
        int id = Convert.ToInt32(context.Request.QueryString["id"]);
        if (id != null)
        {
            using (DrisionDbContext cont = new DrisionDbContext(GlobalObject.ConnString))
            {
                Repository<T_Attachment> rep = new Repository<T_Attachment>(cont);
                T_Attachment Attachment = rep.FindById(id);
                byte[] AttachData = Attachment.FileData;
                OutPutThumbnail(AttachData, context);
            }
        }
        //context.Response.ContentType = "text/plain";
        //context.Response.Write("Hello World");
    }
    //输出缩略图
    public void OutPutThumbnail(byte[] AttachData,HttpContext context)
    {
        try
        {
            //写入内存流
            using (MemoryStream stream = new MemoryStream(AttachData))
            {
                using (Bitmap bm = new Bitmap(stream))
                {
                    //Bitmap bm = null;
                    Image image = null;
                    //bm = new Bitmap(stream);
                    int width = 100;
                    int height = (int)(width * ((double)bm.Height / (double)bm.Width));
                    // getthumbnailimage生成缩略图 
                    image = bm.GetThumbnailImage(width, height, null, IntPtr.Zero);
                    context.Response.ContentType = "image/jpeg";
                    image.Save(context.Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg);
                    image.Dispose();
                }
            }
        }
        catch (Exception ex)
        {
            context.Response.ContentType = "text/plain";
            context.Response.Write(ex.Message);
        }
    }
    public bool IsReusable {
        get {
            return false;
        }
    }
}

   原图

Show Source Image
<%@ WebHandler Language="C#" Class="ShowSourceImage" %>

using System;
using System.Web;
using Drision.Framework.Entity;
using System.IO;
using System.Drawing;
using Drision.Framework.Repository.EF;
using Drision.Framework.Web;
using Drision.Framework.Repository;
public class ShowSourceImage : IHttpHandler {

    public void ProcessRequest(HttpContext context)
    {
        int id = Convert.ToInt32(context.Request.QueryString["id"]);
        if (id != null)
        {
            using (DrisionDbContext cont = new DrisionDbContext(GlobalObject.ConnString))
            {
                Repository<T_Attachment> rep = new Repository<T_Attachment>(cont);
                T_Attachment Attachment = rep.FindById(id);
                byte[] AttachData = Attachment.FileData;
                //OutPutThumbnail(AttachData, context);
                //context.Response.ContentType = "text/plain";
                //context.Response.Write("Hello World");
                context.Response.ContentType = "image/jpeg";
                context.Response.BinaryWrite(AttachData);
            }
        }
    }
    /// <summary>
    /// 输出缩略图
    /// </summary>
    /// <param name="AttachData">二进制数组</param>
    /// <param name="context">HttpContext context</param>
    public void OutPutThumbnail(byte[] AttachData, HttpContext context)
    {
        try
        {
            //写入内存流
            using (MemoryStream stream = new MemoryStream(AttachData))
            {
                using (Bitmap bm = new Bitmap(stream))
                {
                    //Bitmap bm = null;
                    Image image = null;
                    //bm = new Bitmap(stream);
                    int width = 100;
                    int height = (int)(width * ((double)bm.Height / (double)bm.Width));
                    // getthumbnailimage生成缩略图 
                    image = bm.GetThumbnailImage(width, height, null, IntPtr.Zero);
                    context.Response.ContentType = "image/jpeg";
                    image.Save(context.Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg);
                    image.Dispose();
                }
            }
        }
        catch (Exception ex)
        {
            context.Response.ContentType = "text/plain";
            context.Response.Write(ex.Message);
        }
    }
    public bool IsReusable {
        get {
            return false;
        }
    }
}

 

posted on 2012-08-29 09:34 Hao_Guo 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/HaoGuo/archive/2012/08/29/Thumbnail.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
首先,将图片转换成二进制流,然后将二进制流存储到数据库。以下是将图片添加到数据库的示例代码: ```csharp // 读取图片文件 var image = Image.FromFile(@"C:\path\to\image.jpg"); // 将图片转换成二进制流 byte[] imageBytes; using (var ms = new MemoryStream()) { image.Save(ms, ImageFormat.Jpeg); imageBytes = ms.ToArray(); } // 创建数据库连接和命令对象 using (var connection = new SqlConnection(connectionString)) { connection.Open(); var command = new SqlCommand("INSERT INTO Images (ImageData) VALUES (@ImageData)", connection); // 添加参数 command.Parameters.Add("@ImageData", SqlDbType.VarBinary, imageBytes.Length).Value = imageBytes; // 执行插入操作 command.ExecuteNonQuery(); } ``` 接下来,从数据库读取二进制流,并将其转换为图像。以下是从数据库读取并显示图像的示例代码: ```csharp // 创建数据库连接和命令对象 using (var connection = new SqlConnection(connectionString)) { connection.Open(); var command = new SqlCommand("SELECT ImageData FROM Images WHERE ImageId = @ImageId", connection); // 添加参数 command.Parameters.Add("@ImageId", SqlDbType.Int).Value = imageId; // 执行查询操作 var reader = command.ExecuteReader(); // 读取二进制数据并转换成图像 if (reader.Read()) { var imageBytes = (byte[])reader["ImageData"]; using (var ms = new MemoryStream(imageBytes)) { var image = Image.FromStream(ms); // 显示图像 pictureBox1.Image = image; } } } ``` 其,`imageId` 是要读取的图片在数据库的唯一标识符。需要注意的是,如果从数据库读取的二进制数据不是图像格式,则会抛出异常。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值