Home > ★科学、技術、PCなど > 大きな画像を自動リサイズ

大きな画像を自動リサイズ

 最近、色々なサイトで綺麗な絵・写真、面白い画像を見るのが楽しみです。
 良い絵は、良い音楽と同様、いつでも手元に置いてすぐに取り出せる状態にしておきたいので、ダウンロードして、ある程度たまったらテーマ別に記事を書いて、このブログに貼り付けています。


 しかし。


 画像は出来る限り大きく見たい。けれども、あまりに大きいと表示に時間がかかるし、ブログの容量には限度がある。


 そんな悩みが以前からありました。


 ブログの容量に関しては、MediaFirePicasa Web Albumsなどのウェブアルバムが無料で利用できるのでそれを活用しています。今、メインで使っているのははてなフォトライフです。複数画像を一括でアップできるので便利です。


 あ、便利といえば、


はてなダイアリーは、自動でキーワードにリンクが付き、語句の説明や、その語を含む日記を読むことが出来るので重宝しています。たまに、記事をはてなへアップし、そのソースをそのままこちらに貼り付けることもしています。
 はてなフォトライフの写真も簡単に日記にアップできるので、はてなの活用は結構おすすめです(ただし、便利なだけに何かと記述方法が特殊で、カスタマイズの際やっかいなので、メインにするのは個人的にはちょっと、、、というかFC2でここまでやってきたのだから、今さら、という思いがあります)。はてなはSEO対策に向いているかもしれません。


 その、はてなダイアリーで気づいたのですが、大きな画像は自動的に小さく表示してくれていますね。クリックすれば元の大きさの画像が見れます。
 一つ一つ、小さい画像を用意して、リンク先に元の画像を指定しても良いのですが、数が多いと煩雑なのでこれは便利!だと思います。


【?】大きすぎる画像を自動縮小、小さい画像はそのまま表示できないか、という質問も参考になりましたが、はてなダイアリーのソースを見ると、スタイルシート「max-width」を使っていることが分かり、早速自分もやってみました。


 はてなダイアリーの画像は既に

<img src="~" ~ class="hatena-fotolife">

と属性を与えられているので、テンプレートのスタイルシートに

.hatena-fotolife {
max-width:460px;
}

を付け加えました。


 横幅が460px 以上の画像も、横460px に縮小されたことを確認し、無事終了~~♪
\(^o^)/


と思ったのですが、実は終わってませんでした。


 この max-width はIE(Internet Explorer)には対応していないのです!(ーεー)


 え゙、でもはてなダイアリーはIEでもしっかり画像の自動縮小はされているのですが、、、


そう思って再びソースを見てみると、ありました、

<script type="text/javascript" src="/js/max_width_fotolife.js"></script>

の記述が。なるほど、javascript で補っているのですね。


 そこで色々調べた結果(その間、悪戦苦闘しましたが)、「あるSEのつぶやき: minmax.js – IEでCSSのmax-widthなどを使えるようにするライブラリ」にあるように、minmax.js を使うことにより、問題解決できました!!!


 doxdesk.com でダウンロードした minmax.js がこちらです↓

// minmax.js: make IE5+/Win support CSS min/max-width/height
// version 1.0, 08-Aug-2003
// written by Andrew Clover <and@doxdesk.com>, use freely


/*@cc_on
@if (@_win32 && @_jscript_version>4)


var minmax_elements;


minmax_props= new Array(
  new Array(‘min-width’, ’minWidth’),
  new Array(‘max-width’, ’maxWidth’),
  new Array(‘min-height’,'minHeight’),
  new Array(‘max-height’,'maxHeight’)
);


// Binding. Called on all new elements. If <body>, initialise; check all
// elements for minmax properties


function minmax_bind(el) {
  var i, em, ms;
  var st= el.style, cs= el.currentStyle;


  if (minmax_elements==window.undefined) {
    // initialise when body element has turned up, but only on IE
    if (!document.body || !document.body.currentStyle) return;
    minmax_elements= new Array();
    window.attachEvent(‘onresize’, minmax_delayout);
    // make font size listener
    em= document.createElement(‘div’);
    em.setAttribute(‘id’, ’minmax_em’);
    em.style.position= ’absolute’; em.style.visibility= ’hidden’;
    em.style.fontSize= ’xx-large’; em.style.height= ’5em’;
    em.style.top=’-5em’; em.style.left= ’0′;
    if (em.style.setExpression) {
      em.style.setExpression(‘width’, ’minmax_checkFont()’);
      document.body.insertBefore(em, document.body.firstChild);
    }
  }


  // transform hyphenated properties the browser has not caught to camelCase
  for (i= minmax_props.length; i–>0;)
    if (cs[minmax_props[i][0]])
      st[minmax_props[i][1]]= cs[minmax_props[i][0]];
  // add element with properties to list, store optimal size values
  for (i= minmax_props.length; i–>0;) {
    ms= cs[minmax_props[i][1]];
    if (ms && ms!=’auto’ && ms!=’none’ && ms!=’0′ && ms!=”) {
      st.minmaxWidth= cs.width; st.minmaxHeight= cs.height;
      minmax_elements[minmax_elements.length]= el;
      // will need a layout later
      minmax_delayout();
      break;
  } }
}


// check for font size changes


var minmax_fontsize= 0;
function minmax_checkFont() {
  var fs= document.getElementById(‘minmax_em’).offsetHeight;
  if (minmax_fontsize!=fs && minmax_fontsize!=0)
    minmax_delayout();
  minmax_fontsize= fs;
  return ’5em’;
}


// Layout. Called after window and font size-change. Go through elements we
// picked out earlier and set their size to the minimum, maximum and optimum,
// choosing whichever is appropriate


// Request re-layout at next available moment
var minmax_delaying= false;
function minmax_delayout() {
  if (minmax_delaying) return;
  minmax_delaying= true;
  window.setTimeout(minmax_layout, 0);
}


function minmax_stopdelaying() {
  minmax_delaying= false;
}


function minmax_layout() {
  window.setTimeout(minmax_stopdelaying, 100);
  var i, el, st, cs, optimal, inrange;
  for (i= minmax_elements.length; i–>0;) {
    el= minmax_elements[i]; st= el.style; cs= el.currentStyle;


    // horizontal size bounding
    st.width= st.minmaxWidth; optimal= el.offsetWidth;
    inrange= true;
    if (inrange && cs.minWidth && cs.minWidth!=’0′ && cs.minWidth!=’auto’ && cs.minWidth!=”) {
      st.width= cs.minWidth;
      inrange= (el.offsetWidth<optimal);
    }
    if (inrange && cs.maxWidth && cs.maxWidth!=’none’ && cs.maxWidth!=’auto’ && cs.maxWidth!=”) {
      st.width= cs.maxWidth;
      inrange= (el.offsetWidth>optimal);
    }
    if (inrange) st.width= st.minmaxWidth;


    // vertical size bounding
    st.height= st.minmaxHeight; optimal= el.offsetHeight;
    inrange= true;
    if (inrange && cs.minHeight && cs.minHeight!=’0′ && cs.minHeight!=’auto’ && cs.minHeight!=”) {
      st.height= cs.minHeight;
      inrange= (el.offsetHeight<optimal);
    }
    if (inrange && cs.maxHeight && cs.maxHeight!=’none’ && cs.maxHeight!=’auto’ && cs.maxHeight!=”) {
      st.height= cs.maxHeight;
      inrange= (el.offsetHeight>optimal);
    }
    if (inrange) st.height= st.minmaxHeight;
  }
}


// Scanning. Check document every so often until it has finished loading. Do
// nothing until <body> arrives, then call main init. Pass any new elements
// found on each scan to be bound   


var minmax_SCANDELAY= 500;


function minmax_scan() {
  var el;
  for (var i= 0; i<document.all.length; i++) {
    el= document.all[i];
    if (!el.minmax_bound) {
      el.minmax_bound= true;
      minmax_bind(el);
  } }
}


var minmax_scanner;
function minmax_stop() {
  window.clearInterval(minmax_scanner);
  minmax_scan();
}


minmax_scan();
minmax_scanner= window.setInterval(minmax_scan, minmax_SCANDELAY);
window.attachEvent(‘onload’, minmax_stop);


@end @*/

 これをテキストエディタにコピーし、「minmax.js」と名前をつけて保存、アップロードして、私の場合でしたら<head>~</head>の中に

<script type="text/javascript" src="http://charlie432.fool.jp/wordpress/wp-content/uploads/minmax.js"></script>

を入れてみると、、、、


めでたくIE で max-widthプロパティなどが使えるようになりました!!


ヾ(^o^)人(^ω^)人(^o^)ノ゙


 お困りの方、どうぞお試しくださいd(^∀^)

関連記事

つぶやくどうぞ twitter に引用しちゃってください(^^)ノ

コメント:0

コメントフォーム
Remember personal info

トラックバック:0

このエントリーのトラックバックURL
http://charlie432.fool.jp/2008/09/01/00/00/00/trackback
Listed below are links to weblogs that reference
大きな画像を自動リサイズ from 徒然

Home > ★科学、技術、PCなど > 大きな画像を自動リサイズ

検索
フィード
メタ情報

Return to page top