はてなブログ「一覧形式」の画像をオリジナルのものに変える

トップページの「一覧形式」の画像をオリジナルのものに変える


サイトのデザインって、あれこれ手を加えてこれで良し!と思ったものでも、飽きてくるのか、しばらくすると変更したくなってきます。

このサイトはもう少し持ちそうなんですが(笑)、映画のレビューを書いている「そんなには褒めないよ。映画評」は、はてなブログを始めた頃に作った「Simple Responsive with Menubar」というテーマをベースにした随分前のものですのでさすがに飽きてきました。

で、全体のデザインはまだ構想中なんですが、ちょっとしたテクニックを紹介していこうと思います。



トップページの「一覧形式」

はてなブログProのトップページ表示は、全文形式と一覧形式を選べるようになっています。


f:id:ausnichts:20180305104251j:plain

これですね。どういう風に表示されるかといいますと、下の画像のようになり「一覧表示」と同じです。


f:id:ausnichts:20180305104854j:plain

テーマは公式の Evergreen です。


画像が 500px 四方にトリミングされている

問題は画像なんですが、オリジナル画像ではなく、縦横 500px にトリミングされたサムネイルが使われます。デフォルトでは width: 120px; height: 120px; が指定され小さくなっています。

一覧表示ではいいにしてもトップページがトリミングされたサムネイルでは不都合だという場合にオリジナルを表示する方法をやってみました。


html と css は次のようになっています。

<div class="entry-thumb" style="background-image: url('https://cdn.image.st-hatena.com/image/square/8943960c664553d9f1fd0ab1bcef8f75d0aa8891/backend=imagemagick;height=500;quality=80;version=1;width=500/https%3A%2F%2Fcdn-ak.f.st-hatena.com%2Fimages%2Ffotolife%2Fa%2Fausnichts%2F20180303%2F20180303161557.jpg');">
    </div>
.page-archive .entry-thumb {
    width: 120px;
    height: 120px;
    background-size: cover;
    float: left;
    margin-right: 10px;
}

これを見ますと、オリジナル画像を imagemagick に渡してサムネイルを作っているようです。幸いにして、エンコーディングされてはいますが、オリジナル画像のURIがありますので、それを取り出せばオリジナルを表示できそうです。


オリジナル画像に変更する Javascript

(2018.6/21)jpg, png, gif 対応版が下記記事にあります。

(bug fix)はてなブログ「一覧形式」の画像をオリジナルのものに変える


このコードは画像ファイルが jpg 以外の場合にエラーとなります。上のバグフィックス版をご覧ください。

<script>
(function(){
    if(document.body.classList.contains('page-index')){
        var elements = document.getElementsByClassName('entry-thumb');
        var re = /https%3A%2F%2F.+\.jpg/;
        Array.prototype.forEach.call(elements, function(element) {
            var imageUri = re.exec(element.getAttribute('style'));
            element.style.backgroundImage = 'url(' + decodeURIComponent(imageUri[0]) + ')';
        });
    }
}());
</script>

この Javascript を カスタマイズ > フッタ に入れればトップページのサムネイル画像がオリジナルのものに変わります。ただし、画像の容量によっては重くなる場合がありますので注意してください。また、画像は background に貼り付けてありますので、下の例のように css でサイズを指定する必要があります。


.page-archive .entry-thumb {
    width: 100%;
    height: 436px;
}


f:id:ausnichts:20180305113904j:plain

こんな感じになります。後はサイズや配置を css で変更するだけです。