- PR -

サムネイル表示時の画像のサイズについて

投稿者投稿内容
SL
大ベテラン
会議室デビュー日: 2008/05/02
投稿数: 183
投稿日時: 2008-12-15 16:56
お世話になります。

Web上に画像のサムネイル表示をさせたいと思い DataList に列3とし横方向をセットしました。
そしてテンプレートのItemtemplate にImageとLabel をそれぞれ配置してデータソースは、なしです。
ディスク上にあるファイルの一覧を表示します。

ここでうまくいかないのは、画像のサイズの調整です。
現在ンのサイズで表示するため巨大だったりします。縦横比率は、元のままで
適度なサイズにお調整したいのですがどう書いたらいいですか?
教えてください。

ASP.NET C#

コード:
protected void Page_Load(object sender, EventArgs e)
{
      CollectFiles(パス);

     DataList1.DataSource = CreateDataSource();
     DataList1.DataBind();
        :
}
private void CollectFiles(string path)
{
       // ファイル名を集める
       string filters = "*.jpg;*.png;*.gif";

       foreach (string filter in filters.Split(';'))
       {
          FileInfo[] fit = new DirectoryInfo(
                           this.Server.MapPath(path)).GetFiles(filter);     // "~/images"
       foreach (FileInfo fi in fit)
       {
           files.Add(fi);

       }
    }
}
protected void DataList1_ItemDataBound(object sender, DataListItemEventArgs e)
{
    string mei;

    if (files.Count > e.Item.ItemIndex)
        mei = IdData[0] + files[e.Item.ItemIndex].Name;
    else
       return;

    Control fc = e.Item.FindControl("Image6");
    if (fc != null)
    {
       ((Image)fc).ImageUrl = mei;
     }
     Control lb = e.Item.FindControl("Label6");
     if (lb != null)
      {
         ((Label)lb).Text = mei;
     }
  }
ICollection CreateDataSource()
{
     DataTable dt = new DataTable();
     DataRow dr;

     dt.Columns.Add(new DataColumn("StringValue1", typeof(string)));
     dt.Columns.Add(new DataColumn("StringValue2", typeof(string)));

     for (int i = 0; i < 9; i++)
     {
         dr = dt.NewRow();

         dr[0] = IdData[0] + files[0].Name;
        dr[1] = IdData[0] + files[0].Name;
         //dr[2] = 1.23 * (i + 1);

         dt.Rows.Add(dr);
     }

     DataView dv = new DataView(dt);

return dv;
}



どっとねっとふぁん
ぬし
会議室デビュー日: 2005/02/23
投稿数: 935
投稿日時: 2008-12-15 17:03
> 適度なサイズに調整したいのですが

どこで調整するつもりですか?
aspx内で行うとすると、imageタグの大きさを調整するとかになるでしょうけど、この場合画像自体は大きなままダウンロードされてそれをブラウザが縮小表示する、ということになります。
大きな画像がダウンロードされるため、表示に時間がかかるとかあるでしょうし、そもそもaspx内で一度画像の情報を取り出さないと、その大きさを取得することもできないでしょうね。

画像をサーバ上に登録する時点で、サムネイル用の画像も合わせて作ってしまうほうがよいのではないかと思います。

SL
大ベテラン
会議室デビュー日: 2008/05/02
投稿数: 183
投稿日時: 2008-12-15 20:16
お世話になります。

仕様環境を書くのを忘れました。すみません。
社内のLAN環境の予定でダウンロードに関する問題はないと考えます。
それで、ご指摘のようにaspx 内で一度画像情報を取得するようになるかと思いますが、
どのような形でjpgなどの情報が取得できますか?
ファイル形式は、JPG, PNG, GIF の使用を予定しています。

また、もう一つの「サムネイル用の画像も合わせて作る」自動でできますか?
自動と言うのは、Web上に、FileUploadでアップした画像でこのアップした時に、ついでにサイズを小さくしたものも作ってくれると便利だと思うのですが、こういったことは、可能?ですか?
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2008-12-15 20:49
> また、もう一つの「サムネイル用の画像も合わせて作る」自動でできますか?
その様にプログラムを作れば、可能ですよ。

> どのような形でjpgなどの情報が取得できますか?
どの様な情報が、何処で(あるいは何のために)必要ですか?表示させるだけなら、ファイル名さえわかればいいですよね?
なかむら
ベテラン
会議室デビュー日: 2008/11/11
投稿数: 67
お住まい・勤務地: 福岡
投稿日時: 2008-12-16 01:13
サムネイル画像の作成には、Image クラスの GetThumbnailImage メソッドが便利です。
http://www.atmarkit.co.jp/fdotnet/dotnettips/559thumbnail/thumbnail.html

画像を登録する処理で、ついでにこのメソッドを使ってサムネイルを作成し、
保存しておけばいいと思います。

_________________
Nakamura Blog

[ メッセージ編集済み 編集者: なかむら 編集日時 2008-12-16 01:13 ]
SL
大ベテラン
会議室デビュー日: 2008/05/02
投稿数: 183
投稿日時: 2008-12-16 09:12
お世話になります。

System.Drawing 名前空間は、「System.Drawing 名前空間内のクラスを Windows サービスまたは ASP.NET サービスで使用することはサポートされていません。使用した場合、サービスのパフォーマンス低下や実行時の例外発生など、予期しない問題が発生する場合があります。」

とありますが、「ASP.NET C#」 で使用可能?ですか?
なかむら
ベテラン
会議室デビュー日: 2008/11/11
投稿数: 67
お住まい・勤務地: 福岡
投稿日時: 2008-12-16 09:30
ASP.NET でも画像を扱うなら System.Drawing のお世話になると思います。
例えばこんな風に。
http://www.atmarkit.co.jp/fdotnet/dotnettips/358aspgraph/aspgraph.html

過去ログや他の掲示板でも似たようなトピックがあります。
http://hpcgi1.nifty.com/MADIA/VBBBS2/wwwlng.cgi?print+200805/08050031.txt
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?forum=7&topic=27282

_________________
Nakamura Blog
SL
大ベテラン
会議室デビュー日: 2008/05/02
投稿数: 183
投稿日時: 2008-12-16 13:43
お世話になります。

教えていただいたことを参考にして下記のようにしましたが、
「'/' アプリケーションでサーバー エラーが発生しました。
~/Data/2008090601/DSCF0001.jpg
説明: 現在の Web 要求を実行中に、ハンドルされていない例外が発生しました。エラーに関する詳細および例外の発生場所については、スタック トレースを参照してください。

というエラーが出て解決策がわかりません。


コード:

System.Drawing.Image orig = System.Drawing.Image.FromFile(IdData[0] + "DSCF0001.jpg");
System.Drawing.Image thumbnail1 = CreateThumbnail1(orig, orig.Width / 20, orig.Height / 20);
thumbnail1.Save("thumbnail1.jpg", System.Drawing.Imaging.ImageFormat.Jpeg);




### この部分は、フルパスを与えることで解決しました。
###  現在、それ以降を確認しています。
[ メッセージ編集済み 編集者: SL 編集日時 2008-12-16 13:57 ]

[ メッセージ編集済み 編集者: SL 編集日時 2008-12-16 13:57 ]

スキルアップ/キャリアアップ(JOB@IT)