<input type=”file”>で画像をアップロードする際、特に複数ある場合にサムネイルがないと、正直何をアップロードしようとしているのか確認できません。
そこで、JavaScriptとWeb APIのFileReaderオブジェクトを使用して、画像をBase64エンコードしてサムネイルを表示する方法をご紹介します。
目次
ファイル選択時にサムネイルを表示
やり方としては、ファイルを選択した際に発火するJavaScriptのonChangeイベントの時に、FileReaderを使ってBase64エンコードし、用意していたサムネイル用のイメージタグに差し込みます。
HTMLで画像選択フォーム作成
#file-imageがファイル選択で、#print_imgが表示用のイメージタグです。
1 2 3 4 5 6 7 8 9 |
<div class="panel panel-default"> <div class="panel-heading">画像</div> <div class="panel-body"> <img src="#" alt="" class="img-print" id="print_img" style="width:100%;"> </div> <div class="panel-footer"> <input type="file" id="file-image" accept="image/*"> </div> </div> |
JavaScriptでサムネイル表示
以下はピュアなJavaScriptで書いていますが、後程jQueryのプラグイン等も紹介します。
表示前にAPIが対応しているか確認を入れてます。
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 |
window.onload = function() { (function() { var print_img_id = 'print_img'; if (checkFileApi()) { var file_image = document.getElementById('file-image'); file_image.addEventListener('change', selectReadfile, false); } function checkFileApi() { if (window.File && window.FileReader && window.FileList && window.Blob) { return true; } alert('このブラウザはFile APIに対応していないため利用できません'); return false; } function selectReadfile(e) { var file = e.target.files; var reader = new FileReader(); reader.readAsDataURL(file[0]); reader.onload = function() { readImage(reader, print_img_id); } } function readImage(reader, print_image_id) { var result_DataURL = reader.result; var img = document.getElementById(print_image_id); var src = document.createAttribute('src'); src.value = result_DataURL; img.setAttributeNode(src); } })(); } |
便利なjQueryライブラリも!
ファイル選択時にサムネイルを表示してくれるシンプルなjQueryのプラグインを見つけました。
プラグインの概要は以下の通りです。
- Webページから <input type=”file”> を使って画像を選択したときに、その画像のプレビューをその場に表示させて画像の確認ができるjQueryプラグインです。
- CSS で画像の大きさを制限すれば、サムネイル表示になります。
- アップロードされた画像の差し替え、画像のファイル選択ボタンにも対応しています。
- HTML5 の File API という機能で表示させます。(近年のブラウザで対応)
- HTMLページが HTML5 形式でなくても(例えば XHTML 1.0 でも)、ブラウザが HTML5 に対応していれば使えると思います。
jQuery Upload Thumbs - 画像アップロード前にプレビューを表示させる jQueryプラグイン - Dekasu.net
Webページから を使って画像を選択したときに、その画像のプレビューをその場に表示させて画像の確認ができるjQueryプラグインです。アップロードさ...
また、イメージタグのsrc要素に、サムネイルとなる画像をエンコードして入れるためのjQueryのBase64ライブラリはこちら。
jQuery Base64 | The jQuery Plugin Registry
Static archive of the old plugins.jquery.com site.
CDNも用意されていますよ。
Base64 - Libraries - cdnjs - The #1 free and open source CDN built to make life easier for developer...
Base64 encoding and decoding - Simple. Fast. Reliable. Content delivery at its finest. cdnjs is a free and open-source CDN service trusted by over 12.5% of all ...
CodePenにもサンプルがありますので、参考にどうぞ。
画像のドラッグ&ドロップ対応も!
また、こちらはサムネイルを表示するだけでなく、ドラッグ&ドロップとリサイズにも対応しているJavaScriptのライブラリ[Dropzone.js]を使ったサンプルです。
アニメーションも付いていて、正直こっちの方がカッコイイです。
以上、色々試してみてください。
コメント