プログラムのメモ置き場 @ ウィキ

asp007

最終更新:

chaka-poko

- view
管理者のみ編集可

画像を縮小表示する(ASP.NET)

メモ
透過GIFは透過でなくなってしまう。Bitmapに変換してから縮小しているから?

テーブルのレイアウト

フィールド名 データ型
id int ID(主キー 連番)
subject varchar(300) 件名
title varchar(100) ファイル名
type varchar(50) MIMEタイプ
idata varbinary(MAX) バイナリ・データ
last_modified datetime 最終更新日

Thumbnail2.aspx

  1. <html xmlns="http://www.w3.org/1999/xhtml" >
  2. <head runat="server">
  3. <title>画像を縮小して表示(ASP.NET)</title>
  4. </head>
  5. <body>
  6. <form id="form1" runat="server">
  7. <h3>
  8. 画像を縮小して表示 ASP.NET版</h3>
  9. <asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl="~/Default.aspx">戻る</asp:HyperLink>
  10. <p>
  11. 100px×100pxに収まるように比率を維持して縮小</p>
  12. <asp:DataList ID="DataList1" runat="server" DataKeyField="id" DataSourceID="SqlDataSource1">
  13. <ItemTemplate>
  14. <strong>
  15. id:</strong>
  16. <asp:Label ID="lblId" runat="server" Text='<%# Eval("id") %>'></asp:Label>
  17. <strong>
  18. subject:</strong>
  19. <asp:Label ID="lblSubject" runat="server" Text='<%# Eval("subject") %>'></asp:Label><br />
  20. <asp:Image ID="imgIdata" runat="server" CssClass="thumb" /><br />
  21. <hr />
  22. </ItemTemplate>
  23. </asp:DataList>
  24. <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:NetWorks01ConnectionString %>"
  25. SelectCommand="SELECT [id], [subject] FROM [d_Image]">
  26. </asp:SqlDataSource>
  27. </form>
  28. </body>
  29. </html>

Thumbnail2.aspx.vb

  1. Partial Class ImageThumbnail_Thumbnail2
  2. Inherits System.Web.UI.Page
  3.  
  4. Protected Sub DataList1_ItemDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DataListItemEventArgs) Handles DataList1.ItemDataBound
  5.  
  6. If e.Item.ItemType = ListItemType.Item Or e.Item.ItemType = ListItemType.AlternatingItem Then
  7. Dim id As Label = CType(e.Item.FindControl("lblId"), Label)
  8. Dim image As Image = CType(e.Item.FindControl("imgIdata"), Image)
  9.  
  10. image.ImageUrl = "Image2.aspx?id=" & id.Text
  11. End If
  12.  
  13. End Sub
  14. End Class

Image2.aspx

※空のページ
  1. <html xmlns="http://www.w3.org/1999/xhtml" >
  2. <head runat="server">
  3. <title>画像</title>
  4. </head>
  5. <body>
  6. <form id="form1" runat="server">
  7. <div>
  8.  
  9. </div>
  10. </form>
  11. </body>
  12. </html>

Image2.aspx.vb

  1. Imports System.Data.SqlClient
  2. Imports System.Data
  3.  
  4. Partial Class ImageThumbnail_Image2
  5. Inherits System.Web.UI.Page
  6.  
  7. Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
  8.  
  9. '選択されたIDの画像をDBから取り出して表示する。
  10.  
  11. Dim id As Integer
  12. id = Request.QueryString("id")
  13.  
  14. Dim db As New SqlConnection(ConfigurationManager.AppSettings("dbstr"))
  15. Dim cmd As SqlCommand = New SqlCommand("SELECT type,idata FROM d_Image WHERE id=@p1", db)
  16. Dim p1 As SqlParameter = cmd.Parameters.Add("@p1", SqlDbType.Int)
  17. p1.Value = id
  18. db.Open()
  19. Dim rs As SqlDataReader = cmd.ExecuteReader()
  20. If rs.Read Then
  21. Dim oW As Integer = 100 ' サムネイル表示サイズ横
  22. Dim oH As Integer = 100 ' サムネイル表示サイズ縦
  23.  
  24. Dim bmp As System.Drawing.Bitmap = System.Drawing.Bitmap.FromStream(New System.IO.MemoryStream(DirectCast(rs("idata"), Byte())))
  25. If bmp.Width > oW Or bmp.Height > oH Then
  26. Dim s As Double = Math.Min(oW / bmp.Width, oH / bmp.Height)
  27. Dim sW As Integer = CInt(s * bmp.Width)
  28. Dim sH As Integer = CInt(s * bmp.Height)
  29. Dim outBmp As System.Drawing.Bitmap = New System.Drawing.Bitmap(sW, sH)
  30. Using g As System.Drawing.Graphics = System.Drawing.Graphics.FromImage(outBmp)
  31. g.DrawImage(bmp, 0, 0, sW, sH)
  32. End Using
  33.  
  34. Response.ContentType = CType(rs("type"), String)
  35. outBmp.Save(Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg)
  36. Else
  37. Response.ContentType = CType(rs("type"), String)
  38. Response.BinaryWrite(DirectCast(rs("idata"), Byte()))
  39. End If
  40. Response.End()
  41. End If
  42.  
  43. rs.Close()
  44. db.Close()
  45.  
  46. End Sub
  47. End Class
  48.  

参考にさせていただいたページ



[Counter] Total: -
目安箱バナー