kazuk は null に触れてしまった

C# / .NET 系技術ネタ縛りでお送りしております

T4でサムネイル画像を生成する


Webの制作っていうと何かと画像処理って出てくるわけでございます。

一括処理とかムニャムニャ考えないと日がな一日ツールをポチポチする羽目になってタンポポ中毒になってしまいます。

てな訳で T4 から GDI+ で一括処理だ!

とりあえずサムネイルを作るだけならこんな感じ。もちろんの事ながら画像を収める img タグとかも同時に吐かせようと思えば余裕!

 

   1:  <#@ template debug="false" hostspecific="true"  language="C#" #>
   2:  <#@ output extension=".txt" #>
   3:  <#@ assembly name="EnvDTE" #>
   4:  <#@ assembly name="System.Core"#>
   5:  <#@ assembly name="System.Drawing" #>
   6:  <#@ import namespace="System.Drawing"#>
   7:  <#@ import namespace="System.Drawing.Drawing2D"#>
   8:  <#@ import namespace="System.Drawing.Imaging"#>
   9:  <#@ import namespace="System.IO"#>
  10:  <#@ import namespace="System.Collections.Generic"#>
  11:  <# 
  12:      var dir= Path.GetDirectoryName( Host.TemplateFile );
  13:      var thumbImageDir = Path.Combine( Path.GetDirectoryName(dir), "thumbs");
  14:      double maxWidth = 320;
  15:   #>
  16:      Source dir:    <#= dir #>
  17:      Target dir: <#= thumbImageDir #>
  18:  <#
  19:   
  20:      foreach( var pngFile in Directory.GetFiles( dir,"*.png" ) )
  21:      {
  22:  #>
  23:  <#=pngFile#> を変換中
  24:  <#
  25:          using( Image img = Image.FromFile( Path.Combine( dir, pngFile ) ) )
  26:          {
  27:              Size sizeImg = img.Size;
  28:              if( sizeImg.Width>maxWidth ) 
  29:              {
  30:                  double factor = maxWidth / (double)sizeImg.Width ;
  31:                  sizeImg.Width = (int) (sizeImg.Width * factor);
  32:                  sizeImg.Height =(int) (sizeImg.Height * factor);
  33:  #>
  34:      original width:<#=img.Width#>
  35:      original height:<#=img.Height#>
  36:      factor: <#=factor#>
  37:      width: <#=sizeImg.Width#>
  38:      height: <#=sizeImg.Height#>
  39:  <#            
  40:              }
  41:              using( Image small = new Bitmap( sizeImg.Width, sizeImg.Height, img.PixelFormat ) )
  42:              {
  43:                  using( Graphics g = Graphics.FromImage( small ) )
  44:                  {
  45:                      g.CompositingQuality = CompositingQuality.HighQuality;
  46:                      g.InterpolationMode =InterpolationMode.HighQualityBicubic;
  47:                      g.DrawImage( img,0,0, sizeImg.Width, sizeImg.Height );
  48:                  }
  49:                  string savePath =Path.Combine(thumbImageDir, Path.GetFileName( pngFile ) );
  50:  #>
  51:      saveTo:<#=savePath#>
  52:  <#
  53:                  small.Save( savePath,ImageFormat.Png );
  54:              }
  55:          }
  56:      }
  57:  #>

 

一応ちゃんとしっかり using を使ってるけど、へくってると画像の大きさとかによってはVSが巻き添えになる可能性もなきにしもあらずなんで、usingはしっかりしようね!

広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。