PowerPointでソフトのアイコンを作成する2

PowerPointでソフトのアイコンを作成するの中で、PowerPointやビットマップサイズ変更など、いくつか調査した内容についてのまとめ。

図の保存

PowerPointでの図の保存について。

保存形式

以下のものが選べる。選択はファイル保存時の「ファイルの種類」から選択ができる。

ビットマップ型のものについては形式も載せておく。
(使用している色数が多い場合、出力形式がどのように変わるかまでは調査していない。)

  • PNG
    8bppインデックスタイプ
  • JPEG
    24bpp BGR
  • GIF
    8bppインデックスタイプ
  • TIFF
    32bpp BGRA
  • BMP
    24bpp BGR
  • SVG
  • 拡張メタファイル(EMF)
  • Windowsメタファイル(WMF)

PNG/GIFでは8bppインデックスタイプでの出力だが、Visual StudioもしくはBitmapオブジェクトに取り込み32bpp BGRA化することで透過部分の情報に変換することができた。

  • Visual Studioで読み込み時の表示内容
  • 32bpp BGRA化に変更した後

    下の緑の格子模様の部分は、ビットマップの透過度を見られるように背景を調整しているため。

保存時のピクセルサイズ

まず保存時のPPIを計測してみることにする。
サンプルとして、1インチ四方の四角の図形を保存してみた。

実際の図形は、枠無し・塗りつぶし無しの四角形の内側に矢印を配置したもの。
これをコンテキストメニュー経由の「図として保存」を選択しPNG形式で保存する。

保存したのが以下の様なもので、縦横330ピクセルとなった。つまり保存サイズは330PPIになるのだろうか。

330PPIの由来についてWEBで検索してみたのだが、それとしてヒットするものはなかった。
近いものとしてPowerPointに図を配置した時の図の保存PPIに関する設定の中に330PPIというものがあった。

これは、PowerPointの設定の中の詳細設定-イメージのサイズと画質中の設定項目。
ただ、この設定項目を96ppiに変更しても保存されたPNGが96ppiになることはなかったので、図形保存時のPPIは330固定なのかもしれない。

次に、枠有の場合にサイズが変わるかどうかも調べてみた。

こちらは、外枠を6ポイントにし保存したもの。サイズは358ピクセル。
1ポイントというのは1/72インチということなので、増えた28ピクセルは外枠分ということなのだろうか。

ちなみに、PowerPointで枠の太さを0.25ptにしたのは、出力時のピクセル幅が1ピクセルになるため。
アイコン図形を作成する際には枠があったほうが大きさの調整がしやすいし、出力後のビットマップから除去するには、1ピクセルの方が計算としてやりやすいから。

補足

ファイル – 名前を付けて保存で保存形式をビットマップにした場合、96dpiでの保存になるようだ。

これを変更する手段は、以下に記載があった。レジストリを編集するのでちょっと面倒かも。

PowerPoint から高解像度 (高dpi) スライドをエクスポートする方法 - Microsoft 365 Apps
PowerPoint スライドを画像として保存するときに、1 インチあたりのドット数 (dpi) の設定を変更する方法について説明します。 これを行うには、新しいレジストリ値を追加する必要があります。

画像のサイズ変更

PowerShellで以前作成したスクリプトを改造して、出力データのサイズをピクセル指定可能にしたものを使用する。
8bppインデックスのPNG形式を読み込みサイズ調整したものをPNGとして出力した場合、32bpp BGRA形式で出力されたので、透明部分も適用できるので、これで問題はないと思われる。

今回のスクリプトでは、以下の点が特異な点になっている。

GUI

処理対象ファイルをDrag & Dropで指定可能とするため、またアイコンサイズを指定可能にするため、GUIを設けた。
Drag & Dropは操作性向上のため。

PowerShell-GUIを使ったDrag&Dropを参照。

PowerShellスクリプト内でSystem.Windows.FormsをインポートしてGUI部分を作成するようにしている。

画像の枠の除去

保存時のピクセルサイズの最後の方にも記述したが、PowerPoint上ではアイコン作成時にどこに図形を配置するか分かるようにするため、枠を設けた四角形の内側に図形を登録するようにしている。
またビットマップ保存時には、操作性向上のため、枠ごとビットマップ化している。

このため、ビットマップ内に枠が描画されてしまい、これをアイコンサイズに変更した場合に、その枠が余計なものとしてサイズ調整されてしまう。

そこで、アイコン化のためのリサイズ時に、ソースとするビットマップの枠は除去してリサイズするようにした。

この処理はPowerShellスクリプト内のDrawImageの部分で、前と変えRectangleオブジェクトを渡すようにしているところ。
詳細はコードの方を参照。

コメント

タイトルとURLをコピーしました