晴歩雨描

晴れた日は外に出て歩き、雨の日は部屋で絵を描く

JavaScript、jQuery、CSS)ポップアップ写真画像をブラウザのウインドウサイズに合わせて拡大縮小できるようにした。

以前、HTMLで写真サムネイルアルバム+ポップアップ画像ページを作成した。下はその時のブログ記事。

作成したサムネイルアルバムWebページは、以下。

https://ok2nd.sakura.ne.jp/album/kobe1-v.html

f:id:art2nd:20190902153738j:plain

このWebページのサムネイル画像をクリックすると、ポップアップ的に1枚の写真が拡大されたページを表示する。

f:id:art2nd:20190902154309j:plain

このポップアップページは、ウインドウの横幅のリサイズに合わせて写真画像がリサイズするようになっていたが、縦の高さのリサイズには対応していなかった。(現在の上のページは対応済みになっている。)

≪縦高のリサイズに対応していない版≫
https://ok2nd.sakura.ne.jp/album/photo-v01.php?photo=kobe1/800/20170929143935.jpg

今回、このポップアップ画像ページの写真をウインドウの縦方向のリサイズにも合わせて拡大縮小できるようにした。

しかし、この機能の実現は、このポップアップ画像ページの写真は<img>タグで表示しているだけではなく、<div>で影付き枠やビネット枠を付加していることもあって、簡単ではなかった。

以下、備忘録。

【ボックスの高さをブラウザの高さに合わせる基本的な手段】

まず、基本的な事。<img>や<div>等のボックスをブラウザの横幅に合わせるのは、"max-width: 100%;"で簡単にできるが、高さを合わせるのは簡単ではない。単純に"max-height: 100%;"で解決するわけではない。

とりあえずは、親要素のhtmlやbodyにも100%を設定するか、

html,body{
	height: 100%;
}
.box{
	height: 100%;
}

%でなく、"vh"を使って、

.box{
	height: 100vh;
}

としないといけない。

【縦の高さのリサイズに一部対応】

今回、写真画像の縦の高さはウインドウに対してパーセント指定ではなく、ウインドウの高さから一定のピクセル値を引いたサイズにしたかったので、各ボックスのheightを100%にした上で、JavaScriptを使って親ボックスの高さを変える事にした。

≪不完全版:縦高のリサイズに一部対応≫
https://ok2nd.sakura.ne.jp/album/photo-v02.php?photo=kobe1/800/20170929143935.jpg

<div class="page-box">
<div class="box-frame">
	<div class="vignette">
		<img id="photo" src="kobe1/800/20170929143935.jpg">
	</div>
</div>
</div>
<style>
.box-frame {
	height: 100%;
	...
}
.vignette {
	height: 100%;
	...
}
img {
	height: 100%;
	...
}
</style>
<script>
$(function(){
	photoResize();
});
// ブラウザ・ウインドウのリサイズ
$(window).on('resize',function(){
	photoResize();
});
function photoResize() {
	// ウインドウの高さから60px引いた値を設定
	$('.page-box').outerHeight($(window).height() - 60);
}
</script>

しかし、この方法では、ウインドウの縦横比率が写真画像の縦横比率に比べて縦長の場合に、縦方向に間延びした画像になってしまう。

f:id:art2nd:20190902172203j:plain

【縦の高さのリサイズに対応】

上記の問題をクリアするために、ウインドウと写真画像の縦横比率の比較をして、縦長の場合には、親ボックスも含めて、各ボックスの高さ(height)を全てautoにするようにした。しかし、これではまだ問題があることが判明。解決策は以下に。

≪未完成:縦高のリサイズに対応≫
https://ok2nd.sakura.ne.jp/album/photo-v03.php?photo=kobe1/800/20170929143935.jpg

<script>
var photoRatio;
$(function(){
	// 画像オリジナルの横幅・高さを得る
	var photoW = document.getElementById('photo').naturalWidth;
	var photoH = document.getElementById('photo').naturalHeight;
	photoRatio = photoH / photoW;
	photoResize(photoRatio);
});
// ブラウザ・ウインドウのリサイズ
$(window).on('resize',function(){
	photoResize(photoRatio);
});
function photoResize(photoRatio) {
	// ブラウザ・ウインドウの横幅・高さを得る
	var windowW = $(window).width();
	var windowH = $(window).height();
	var windowRatio = windowH / windowW;
	if (photoRatio > windowRatio) {	// ウインドウと画像の縦横比率の比較
		// 写真の高さをウインドウの高さに合わせる。
		$('.page-box').outerHeight($(window).height() - 60);
		$('#photo').height('100%');
		$('.box-frame').height('100%');
		$('.vignette').height('100%');
	} else {
		$('.page-box').height('auto');
		$('#photo').height('auto');
		$('.box-frame').height('auto');
		$('.vignette').height('auto');
	}
}
</script>

【後日追記】

しかし、これでは、写真画像がロードされる前にスクリプトが走ってしまい、写真画像の縦横サイズが取得できず、ブラウザウインドウが横長な時にリサイズ処理がうまくいかない事がある。

そこで、画像のロードを待ってから、画像サイズの取得を行うように修正。この場合、HTMLで<img>のsrcに画像のパスが指定されていると、やはり画像のロードが完了しないうちにスクリプトが走ってしまうので、src属性へのパス指定はスクリプトで行う。

≪完成版:画像ロード後に画像サイズを取得するように修正≫
https://ok2nd.sakura.ne.jp/album/photo.php?photo=kobe1/800/20170929143935.jpg

<div class="box-frame">
	<div class="vignette">
<!--	ここでsrcに画像のパスを指定しない -->
		<img id="photo" src="">
	</div>
</div>

<script>
var photoRatio;
$(function(){
	var img = $('#photo');
	img.attr('src', 'xxxxx.jpg');	// 画像ファイルを指定
	img.bind('load', function(){	// 画像のロードを待ってから処理
		// 画像オリジナルの横幅・高さを得る
		var photoW = document.getElementById('photo').naturalWidth;
		var photoH = document.getElementById('photo').naturalHeight;
		photoRatio = photoH / photoW;
		photoResize(photoRatio);
	});
});
// ブラウザ・ウインドウのリサイズ
$(window).on('resize',function(){
	photoResize(photoRatio);
});
function photoResize(photoRatio) {
	// ブラウザ・ウインドウの横幅・高さを得る
	var windowW = $(window).width();
	var windowH = $(window).height();
	var windowRatio = windowH / windowW;
	if (photoRatio > windowRatio) {	// ウインドウと画像の縦横比率の比較
		// 写真の高さをウインドウの高さに合わせる。
		$('.page-box').outerHeight($(window).height() - 60);
		$('#photo').height('100%');
		$('.box-frame').height('100%');
		$('.vignette').height('100%');
	} else {
		$('.page-box').height('auto');
		$('#photo').height('auto');
		$('.box-frame').height('auto');
		$('.vignette').height('auto');
	}
}
</script>

大阪市立東洋陶磁美術館「フィンランド陶芸展(ルート・ブリュック)」「マリメッコ・スピリッツ展」

8月29日。大阪市立東洋陶磁美術館へ。

2019年7月13日~10月14日、「フィンランド陶芸展」「マリメッコ・スピリッツ展」が開催されている。

f:id:art2nd:20190829211842j:plain

フィンランド陶芸展」「マリメッコ・スピリッツ展」どちらも楽しめる。フィンランド陶芸は、日本の陶磁器とは違う色使いがきれい。形もコミカルなものなど独得で面白い。

フィンランド陶芸では、ポスターやチラシの写真にも使われている「ルート・ブリュック」の陶板作品が特に素晴らしかった。ポスターやチラシでは分かりづらいが、実物は表面がガラス質で覆われていて、透明感と光沢があってきれい。一見の価値あり。

写真撮影OKだったので、ルート・ブリュックの作品の写真を少しだけ載せて置く。スマホでガラス越しに撮ったもので画質はあまりよくない。正面から撮影していないので歪んでいる。

ミュージアムショップ横の『沖正一郎コレクション「鼻煙壺」』も見る価値あり。

f:id:art2nd:20190829231458j:plain

f:id:art2nd:20190829211904j:plain

f:id:art2nd:20190829215234j:plain

f:id:art2nd:20190829211906j:plain

f:id:art2nd:20190829211913j:plain

ルート・ブリュックは、以下でも。↓

GIMP色補正)写真の明るさ(明度)や鮮やかさ(彩度)の調整、まとめ?。

WindowsアプリGIMPImageMagick、JTrim等を使って、写真の明るさ(明度)や鮮やかさ(彩度)の調整を色々試してきたが、改めてGIMPによる調整をいくつかまとめて試してみた。(GIMP2.10.10からメニューが全て日本語化されている。2019/8/28時点で最新版は2.10.12。)

どの方法が最適かは、元の写真によって変わってくる。場合によっては不自然になる事もある。

【オリジナル写真】

f:id:art2nd:20190828141853j:plain

【自動調整による方法】

  • メニュー [色] → 自動補正 → 平滑化

f:id:art2nd:20190828141909j:plain

  • メニュー [色] → 自動補正 → ホワイトバランス

f:id:art2nd:20190828141922j:plain

  • メニュー [色] → 自動補正 → Color Enhance (色強調)

f:id:art2nd:20190828141942j:plain

  • メニュー [色] → 自動補正 → Color Enhance (legacy) (色強調)

f:id:art2nd:20190828141954j:plain

  • メニュー [色] → [レベル(L)...] → [Auto Input Levels]

f:id:art2nd:20190828142113j:plain

【手動で調整する方法】

  • メニュー [色] → [明るさ-コントラスト(R)...]

f:id:art2nd:20190828144001j:plain

f:id:art2nd:20190828143945j:plain

  • メニュー [色] → [トーンカーブ(C)...]
    (例)明るい部分をより明るくし、暗い部分をより暗くした。

f:id:art2nd:20190828142357j:plain

f:id:art2nd:20190828142252j:plain

  • メニュー [色] → [色相-クロマ(C)...] (Hue-Chroma)

f:id:art2nd:20190828142409j:plain

f:id:art2nd:20190828142302j:plain

  • メニュー [色] → [色相-彩度(S)] (Saturation)

f:id:art2nd:20190828142423j:plain

f:id:art2nd:20190828142315j:plain

「GIMP」で、もや・かすみの除去を試してみた。(色レベルの調整、トーンカーブの調整)。色補正。

山ではガス(霧)に囲まれる事がしばしば。写真も霞がかったものになる。それはそれで、幻想的で雰囲気があるのだが、少しクリアな写真にしたい場合もある。

画像編集アプリで霞を除去できるのか試してみた。Windowsアプリ「GIMP」を使った。(以下、GIMPバージョン2.10.8のメニュー表示)

オリジナル写真は、今年の夏に行った月山の写真を使った。

とりあえず、色レベルの調整をしてみる。

  • GIMPメニュー[色]→[Levels...]を選択。

f:id:art2nd:20190826173534j:plain

「色レベルの調整」のオプション画面で、「チャネル」は[明度]のまま、「全チャネル」の[Auto Input Levels]をクリックして[OK]するだけ。

f:id:art2nd:20190826173351j:plain

以下、左がオリジナル写真、右がGIMPで霞みを除去した画像。

簡単な操作で霞がうすくなる。

f:id:art2nd:20190826171633j:plain
f:id:art2nd:20190826171636j:plain
f:id:art2nd:20190826171720j:plain
f:id:art2nd:20190826171723j:plain

以下の写真では、[Auto Input Levels]では、池塘の水の色が紫っぽくなってしまった。

f:id:art2nd:20190826172652j:plain
f:id:art2nd:20190826172655j:plain

色レベルの調整でうまくいかない場合は、トーンカーブを調整してみる。

  • GIMPメニュー[色]→[Curves...]を選択。

f:id:art2nd:20190826223010j:plain

トーンカーブの調整」画面で、カーブをマウスで操作することで、任意の明るさに調整できる。

f:id:art2nd:20190826222127j:plain
f:id:art2nd:20190826222129j:plain

トーンカーブの理屈は面倒なので、とりあえず、適当な場所をつまんで操作してみるのが手っ取り早い。

トーンカーブの調整例が以下。

f:id:art2nd:20190826222203j:plain
f:id:art2nd:20190826222207j:plain

2つ目の写真でもトーンカーブの調整を使ってみた。かなり鮮やかになった。

f:id:art2nd:20190826231408j:plain
f:id:art2nd:20190826231411j:plain
f:id:art2nd:20190826231434j:plain
f:id:art2nd:20190826231440j:plain

色レベルの調整やトーンカーブの調整で、霞を薄くしてクリアで鮮やかな写真に加工できる事が分かった。

しかし、旅行の思い出として、「あの時はガスってて、視界が悪くて大変だったなあ」というのを思い出すためには加工前の写真じゃないと。

神戸御影)香雪美術館『篠田桃紅 とどめ得ぬもの 墨のいろ 心のかたち』

8月25日。神戸、阪急御影駅近くにある香雪美術館へ。

8月1日から10月14日まで『篠田桃紅 とどめ得ぬもの 墨のいろ 心のかたち』が開催されている。

篠田桃紅は、今年106歳を迎えた書道家、美術家。墨を使って、書道の枠を超えた独自の抽象画の世界を切り開いた。自分のような凡人の言葉では素晴らしさをきちんと表現できない。

会期中の土、日、祝日の午前11時、午後2時には、ドキュメンタリー「私の前に道はなかった ~篠田桃紅 105歳の軌跡~」が上映されている。このドキュメンタリーは、テレビ信州の自社制作番組で、関西初上映との事。昨年105歳時のインタビュー映像もある。105歳とは思えないしっかりとした口調と言葉。必見。

篠田桃紅は、エッセイも書いている。「墨いろ」は1979年に日本エッセイスト・クラブ賞を受賞している。単行本はあまり持っていないが、「墨いろ」は1978年の初版本を持っている。お気に入りのエッセイ。

岐阜現代美術館にたくさんのコレクションがある。

f:id:art2nd:20190825162248j:plain

f:id:art2nd:20190825162255j:plain

f:id:art2nd:20190825162258j:plain

f:id:art2nd:20190825162252j:plain

f:id:art2nd:20190825162301j:plain