おもこん

おもこんは「思いつくままにコンピュターの話し」の省略形です

プロジェクター用スライドの画像について

プロジェクター用スライドの画像

プレゼンテーションでスライドを作るときに、画像の画素数(これを解像度と言うこともあるが、正しくはない)をどれくらいにしたら良いのでしょうか? 一般にデジカメで撮った画像は画素数が多いので、それを何枚もスライドに入れると容量が大きくなってしまいます。 また、画素数の多い写真はピントが合うまでに少々時間がかかることもあります。 プロジェクタの解像度に適するように変換が行われるためです。 そこで、スライドを作るときの最良の画素数を計算する方法を考えてみました。

結論的には、「プロジェクターの画面解像度が1920x1080ならば、画面いっぱいに写す画像も1920x1080が最適」ということです。 これだけで十分な人は以下の記事を読む必要はありません。

素数とは

デジカメやスマホの写真データは、色情報を持った小さな点の集合になっています。 この点を画素(英語でピクセルpixel)といいます。 写真データにおける画素の数を画素数といいますが、縦横を別々にして1600x900のように表すことが多いです。 この場合、1600が横で900が縦です。 総画素数は、1600x900=1440000=144万画素、となります。

画素の縦横比を「ピクセルアスペクト比」といいます。 画素が正方形なら1:1です。 画素が長方形のこともあり、例えばNTSCビデオシステムでは10:11です(ウィキペディアのピクセルアスペクト比参照)。 コンピュータのディスプレイなどでは、ピクセルアスペクト比は1:1と考えて差し支えありませんが、実際のディスプレイには若干の誤差があります。

解像度と画面解像度

同じ大きさの写真でも、画素が多いものと画素が少ないものでは見た目が大きく違います。 これは長さに対する画素数の割合、すなわち密度の問題になります。 解像度を表すにはDPI(ドット・パー・インチ)を用いることが多いです。 1インチ(2.54cm)あたりに画素がいくつあるかを示します。

DPIは長さに対する画素数の密度ですが、縦横でDPIが異なる可能性があります。 それはピクセルアスペクト比が1:1でない場合です。 それでは、パソコンの場合はどうでしょうか? パソコンディスプレイではピクセルアスペクト比は1:1ですから、DPIは縦横が同じになります。 そこで、縦横区別せずに単にDPIをひとつだけ示せば足りることになります。

一般に解像度が高いほうが見た目が良くなります。 ただし、人間の目には限界がありますので、ある程度の解像度を越えるとその違いは感じられなくなります。 また、ディスプレイとプリンタでは、その仕組みが違うので、同じ解像度でも見た目が変わります。 ちなみに私の持っているPCのディスプレイは13.3型(対角線の長さが13.3インチ)で1920x1080ピクセル(16:9)なので、 横の長さをxとすると

 \displaystyle
x^2+\left(\frac{9x}{16}\right)^2 = 13.3^2 \\
x = 11.6 \\
1920\div 11.6 = 165.6

これより約166dpiです。 解像度はディスプレイによって異なります。

解像度に似た用語に「画面解像度」があります。 これはディスプレイの縦横の画素数を示したもので、密度を表すわけではありません。 例えば私の持っているノートパソコンのディスプレイの画面解像度は1920x1080ドットです。 パソコンをプロジェクターにつなげる場合は、パソコンの外部出力の画面解像度とプロジェクタの画面解像度の能力で決まってきます。 多くの場合はプロジェクターの画面解像度になると思います。 例えば、私の持っているエプソンのプロジェクター「EF-100B」の場合は1920x1080です。

デジカメやスマホ・カメラの画素数

私の持っているデジカメはNikonの「COOLPIX B600」で、通常の撮影における画素数は4608×3456です。

 \displaystyle
4608 = 2^9\times 3^2 \\
3456 = 2^7\times 3^3 \\
4608:3456 = 4:3

同じくスマホのカメラは4000x2250です。 しかし、このスマホには4つのカメラ(1つはインカメラ・・・自撮り用カメラ)があるので、それぞれに画素数が異なります。 ですので、4000x2250はそのうちのひとつにおける画素数です。

 \displaystyle
4000 = 2^5\times 5^3 \\
2250 = 2\times 3^2\times 5^3 \\
4000:2250 = 16:9

いずれもディスプレイの画面解像度よりも画素数が多いです。 あた、アスペクト比(縦横比)が異なるので、4:3の画像は左右に黒い背景を追加して、中央に画像を置く必要があります。

EXIFデータ

EXIFデータはJPEGなどの画像に追加できるメタデータです。 撮影日時、場所、カメラなどの情報が良く用いられます。 ネット上に画像をあげるときに、これらの情報(個人情報)は削除する方が好ましいと言われています。

画像変換のプログラム

画像変換にはImagemagickを使うと良いです。 ここでは、そのRubyライブラリであるRMagickを使って変換プログラムを作ってみます。 私のプロジェクターの画像解像度が1920x1080なので、画像サイズもそれに合わせます。 読者がこのプログラムを活用する際にはお持ちのプロジェクターの画像解像度に合わせて調整してください。 また、16:9以外の画像をこのサイズ内におさめると余白ができますが、余白は黒にします。

ImagemagickやRMagickについては次のリンクが参考になります。

次のプログラムは最後の3行で与えられるファイル(sample1.jpg、sample2.jpg、sample3.jpg)を変換します。 EXIFデータは削除され、サイズが1920x1080に変更され、photo-0.png、photo1-.png、photo2-pngというファイルに保存されます。 定数WidthとHeightを書き換えることにより、異なるサイズに対応できます。

プログラムを起動するには、コマンドラインから

$ ruby image_for_slide.rb

とタイプします。

# image_for_slide.rb 
#
# This program converts images for slides.
# - The image filenames are given after the __END__ line.
# - Removes EXIF data.
# - Resizes the images to suit slides
# - The name of the created image files are "photo-0.png", "photo-1.png", ...
 
require 'rmagick'
include Magick

# Display resolution
# 16:9
Width = 1920
Height = 1080
# 4:3
# Width = 1024
# Height = 768

imagelist = ImageList.new(*DATA.read.split(/\n/))
imagelist.each do |image|
  image.strip!
end
imagelist = imagelist.map do |image|
  base = Image.new(Width,Height) {|options| options.background_color = 'black'}
  src = image.resize_to_fit(Width,Height)
  base.composite(src,CenterGravity, OverCompositeOp)
end
imagelist.write("photo.png")
__END__
sample1.jpg
sample2.jpg
sample3.jpg