« これからどうなる | トップページ | [javascript] 和暦変換サービス »

2012.02.28

[php] PHPExcelで幅と高さを指定して画像を貼り付ける

帳票出力にPHPExcelを使っているのですが、本日、画像の縮尺変更で少しはまったのでメモしておきます。

画像の幅と高さをsetWidth()とsetHeight()で自由に変更して(アスペクト比を無視して)シートに貼るときは、先にsetResizeProportional(false)で、縦横比を保持しないように設定しましょう。ってことなんです。ソース読んでわかりました。

↓の例。たとえば images/hoge.png が640x480pxの画像だとして、これを 50x50 に縮小してエクセルに貼り付けたい場合、単純に以下のようにやってもうまくいきません。画像オブジェクトがデフォルトで元画像の縦横比を保持するようになっているため、あとから呼び出しているsetHeightで幅も設定されてしまうためです。

$d = new PHPExcel_Worksheet_Drawing();
$d->setPath('images/hoge.png');
$d->setWidth(50);
$d->setHeight(50);
$d->setWorksheet(
    $excel->getActiveSheet());

望み通りの結果を得るには、以下のように先に setResizeProportional(false) と呼び出して縦横比を保持しないように設定する必要があるんですね。

$d = new PHPExcel_Worksheet_Drawing();
$d->setPath('images/hoge.png');
//↓これが必要
$d->setResizeProportional(false);
//↑これが必要
$d->setWidth(50);
$d->setHeight(50);
$d->setWorksheet(
    $excel->getActiveSheet());

ちなみに、PHPExcel_Worksheet_Drawing(正確には基本クラスのPHPExcel_Worksheet_BaseDrawing)には、 setWidthAndHeight というメソッドがありますけど、これは縦横比を保持する設定でしか動作しません。指定した幅と高さにうまく収まるような大きさに縦横比を保持したまま収めるためのメソッドのようですな。縦横比を保持しないようにしていると、見事に何にもしないで帰ってきますw

PHPExcelはソースを読むと妙な面白さがあって不思議と腹が立たない。とても良いことですね。

« これからどうなる | トップページ | [javascript] 和暦変換サービス »

プログラミング」カテゴリの記事

php」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック


この記事へのトラックバック一覧です: [php] PHPExcelで幅と高さを指定して画像を貼り付ける:

« これからどうなる | トップページ | [javascript] 和暦変換サービス »

2019年5月
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  
フォト

Google AdSense

銀の弾丸

無料ブログはココログ

他のアカウント