イントロダクション
Google のブログサービス「Blogger」にて、アップロードした画像の、取得時のURLのパターンと、動的に取得サイズを変更する方法について調べてみました。
Bloggerでアップロードした画像ファイルの、URLのパターン
http://upa-pc.blogspot.com/2015/04/blogger-image-url.html
Dr.ウーパのコンピュータ備忘録
http://upa-pc.blogspot.com/2015/04/blogger-image-url.html
Dr.ウーパのコンピュータ備忘録
Bloggerでアップロードした画像を、サーバから配信される画像のサイズを指定して表示する方法
http://upa-pc.blogspot.com/2015/04/blogger-image-url-change-size.html
Dr.ウーパのコンピュータ備忘録
http://upa-pc.blogspot.com/2015/04/blogger-image-url-change-size.html
Dr.ウーパのコンピュータ備忘録
今回は、それらの知見を活かして、アップロードした画像の、取得時の画像サイズを動的に変更するための、JavaScriptコードを作成してみました。
Blogger:アップロードした画像の、取得時の画像サイズを動的に変更するための、JavaScriptコード
概要
Blogger でアップロードした画像を取得するためのURLは、一般的に次の構造を持っています。画像のURLの規則
http://[1].bp.blogspot.com/[2]/[3]/[4]/[5]/[6]/[7]
[6] の部分が、画像のサイズを指定している部分です。
詳細については、「Bloggerでアップロードした画像ファイルの、URLのパターン」をご覧ください。
そこで、正規表現によってURLの検査及び分解を実施し、[6]の部分を任意の文字列に差し替えることで、任意の画像を取得できる URL を生成します。
コード
/* Blogger でアップロードした画像の url を加工して、 任意のサイズの画像を取得できるようにするための関数 url: 元の画像のurl 例)https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgR0EZ2VEQccPi8ZOloaWMSRv2WvAIlrI2smCJTNZcP2rgzPyB9ncFFWMdSCUF9uiOupNWBfytYcZyYKrQY-EcF11O8Y5e7KTrm1dCFmMr1TpxKLxffGfsvzTUCgQSnlPBZs6W_WSO1e-M/s1600/simple_eye_catch_1_1_0_TEST.png size: 任意のサイズ 例)s400 戻り値: 任意のサイズの画像を取得できるようした url 失敗した場合、undefined */ function changeBloggerImageSize(url, size) { if (!url) return undefined; if (!size) return undefined; // URL 検査及び分解(この正規表現は厳密ではありません。目的に応じて手を加えてください。) var url_parts = url.match(/^\s*(https?:\/{2}\d+\.bp\.blogspot\.com\/.{12}\/.{11}\/.{11}\/.{11}\/)(.\d{2,4}(?:-c)?)(\/[^#?\s]+)/); if (!url_parts) return undefined; var url_head = url_parts[1]; // url の画像のサイズよりも前の部分 var url_foot = url_parts[3]; // url の画像のサイズよりも後の部分 return url_head + size + url_foot; }
使用例
コード
オリジナル画像 : <br /> <img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgR0EZ2VEQccPi8ZOloaWMSRv2WvAIlrI2smCJTNZcP2rgzPyB9ncFFWMdSCUF9uiOupNWBfytYcZyYKrQY-EcF11O8Y5e7KTrm1dCFmMr1TpxKLxffGfsvzTUCgQSnlPBZs6W_WSO1e-M/s1600/simple_eye_catch_1_1_0_TEST.png" id="local-img-org"/><br /> url : https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgR0EZ2VEQccPi8ZOloaWMSRv2WvAIlrI2smCJTNZcP2rgzPyB9ncFFWMdSCUF9uiOupNWBfytYcZyYKrQY-EcF11O8Y5e7KTrm1dCFmMr1TpxKLxffGfsvzTUCgQSnlPBZs6W_WSO1e-M/s1600/simple_eye_catch_1_1_0_TEST.png<br /> <br /> 変更後の画像 : <br /> <div id="local-result"></div> <script type="text/javascript"> <!-- /* Blogger でアップロードした画像の url を加工して、 任意のサイズの画像を取得できるようにするための関数 url: 元の画像のurl 例)https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgR0EZ2VEQccPi8ZOloaWMSRv2WvAIlrI2smCJTNZcP2rgzPyB9ncFFWMdSCUF9uiOupNWBfytYcZyYKrQY-EcF11O8Y5e7KTrm1dCFmMr1TpxKLxffGfsvzTUCgQSnlPBZs6W_WSO1e-M/s1600/simple_eye_catch_1_1_0_TEST.png size: 任意のサイズ 例)s400 戻り値: 任意のサイズの画像を取得できるようした url 失敗した場合、undefined */ function changeBloggerImageSize(url, size) { if (!url) return undefined; if (!size) return undefined; // URL 検査及び分解(この正規表現は厳密ではありません。目的に応じて手を加えてください。) var url_parts = url.match(/^\s*(https?:\/{2}\d+\.bp\.blogspot\.com\/.{12}\/.{11}\/.{11}\/.{11}\/)(.\d{2,4}(?:-c)?)(\/[^#?\s]+)/); if (!url_parts) return undefined; var url_head = url_parts[1]; // url の画像のサイズよりも前の部分 var url_foot = url_parts[3]; // url の画像のサイズよりも後の部分 return url_head + size + url_foot; } // Blogger でアップロードした画像の url を加工して、任意のサイズの画像を取得するテスト (function () { // 元のBlogger でアップロードした画像のURL var org_url = document.getElementById("local-img-org").getAttribute("src"); // s72-c (縦横72px、中心部抜出)に加工 var new_url = changeBloggerImageSize(org_url, "s72-c"); // img タグ生成・src セット var obj_new_img = document.createElement("img"); obj_new_img.setAttribute("src", new_url); // 画面上に反映 var obj_output = document.getElementById("local-result"); obj_output.appendChild(obj_new_img); obj_output.appendChild(document.createElement("br")); obj_output.appendChild(document.createTextNode("url : " + new_url)); })(); //--> </script>
結果
オリジナル画像 :url : https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgR0EZ2VEQccPi8ZOloaWMSRv2WvAIlrI2smCJTNZcP2rgzPyB9ncFFWMdSCUF9uiOupNWBfytYcZyYKrQY-EcF11O8Y5e7KTrm1dCFmMr1TpxKLxffGfsvzTUCgQSnlPBZs6W_WSO1e-M/s1600/simple_eye_catch_1_1_0_TEST.png
変更後の画像 :
解説
今回作成した、changeBloggerImageSize という関数に Blogger でアップロードした画像の URL と、変更後の画像サイズを示す文字列を入力すると、変更後の画像サイズの画像を取得する URL を取得することができます。Blogger でアップロードした画像の URL かどうかを解析し、画像のサイズを示す部分以外の URL の部分を抜き出すために、次の正規表現を用いています。
Blogger でアップロードした画像の URL かどうかを解析し、画像のサイズを示す部分以外の URL の部分を抜き出すための正規表現:
/^\s*(https?:\/{2}\d+\.bp\.blogspot\.com\/.{12}\/.{11}\/.{11}\/.{11}\/)(.\d{2,4}(?:-c)?)(\/[^#?\s]+)/
正規表現 - JavaScript | MDN
https://developer.mozilla.org/ja/docs/Web/JavaScript/Guide/Regular_Expressions
https://developer.mozilla.org/ja/docs/Web/JavaScript/Guide/Regular_Expressions
なお、この正規表現は現時点で私が目にしたことがある Blogger でアップロードした画像を取得するための URL を基にしています。
そのため、どこかに見落としがある可能性は否定できません。
特に、\d+, .{12}, .{11}, .\d{2,4}(?:-c)?, [^#?\s]+ の部分には注意が必要かもしれません。
上記の changeBloggerImageSize 関数を利用する場合には、利用目的に応じて、その内部処理を検証してください。
まとめ
JavaScript を使用することで、Blogger でアップロードした画像の、取得時の画像サイズを動的に変更することができます。この機能により、画面サイズや解像度に応じて最適な画像を、閲覧者へ提供することが可能になります。
なお、この関数を利用して作成したサービス「Bloggerでアップロードした画像を任意のサイズで取得するWebサービス」を試験的に稼働させています。
Bloggerでアップロードした画像を任意のサイズで取得するWebサービス
http://upa-pc.blogspot.jp/p/blogger-image-size-changer.html
その他
Picasa (Webアルバム)やGoogle+関係などで、上記と同じようなフォーマットで画像のサイズが URL で指定できるものがあるようです。それらでは次のようなドメインで画像の URL が指定されています。
*.ggpht.com
*.googleusercontent.com
これらについては、現在調査中です。
コメントを投稿
コメント投稿機能について