データスキームを使って画像ファイルを埋め込んだimgタグを作成するクラス
以前途中まで書いて放置してたスクリプトをクラス化してみた。
あとjpeg決め打ちだったところをちゃんとファイルフォーマット調べるようにした。
キャッシュが古かったら作り直すようにした。
例外なげるのは面倒くさいのでやめた。
<?php // base64でエンコードした画像データをIMGタグの中に埋め込んで返す // 参考 : http://en.wikipedia.org/wiki/Data_URI_scheme if(!defined('THUMB_CACHE_EXT')) define('THUMB_CACHE_EXT','.b64'); // キャッシュにくっつける拡張子 if(!defined('THUMB_DIR')) define('THUMB_DIR',''); // サムネールがあるディレクトリ if(!defined('THUMB_CACHE_DIR')) define('THUMB_CACHE_DIR',''); // キャッシュを保存するディレクトリ class DScheme { // データスキームキャッシュを取得 function get_thumb_cache($tfile, $odir='', $cdir=''){ if(!$odir) $odir = THUMB_DIR; if(!$cdir) $cdir = THUMB_CACHE_DIR; $ofile = $odir.$tfile; $cfile = $cdir.$tfile.THUMB_CACHE_EXT; $cache = NULL; if(file_exists($ofile)){ $osize = getimagesize($ofile); if(file_exists($cfile)){ // キャッシュの更新タイム確認 $ostat = stat($ofile); $cstat = stat($cfile); if($cstat['mtime'] > $ostat['mtime']){ $cache = file_get_contents($cfile); } else{ $this->delete_thumb_cache($tfile, $cdir); } } if(!$cache){ // キャッシュ作成 $cache = $this->make_thumb_cache($ofile, $cfile, $osize['mime']); } } return $cache; } function make_thumb_cache($ofile, $cfile, $mime){ $bin = file_get_contents($ofile); $txt = base64_encode($bin); $cache = ''; if($txt){ $cache = 'data:'.$mime.';base64,'.$txt; fwrite(fopen($cfile, "w"), $cache, strlen($cache)); // cache保存 } return $cache; } // データスキーム化したimgタグを取得 function get_thumb_itag($tfile, $alt='', $odir='', $cdir=''){ $itag = NULL; $cache = get_thumb_cache($tfile, $odir='', $cdir=''); if($cache){ $itag = '<img src="'.$cache.'" alt="' . $alt . '" />'; } return $itag; } // 指定のキャッシュ削除 function delete_thumb_cache($tfile,$cdir=''){ if(!$cdir) $cdir = THUMB_CACHE_DIR; $cfile = $cdir.$tfile.THUMB_CACHE_EXT; unlink($cfile); } } ?> <?php $d = new DScheme(); echo $->get_thumb_itag('sample.jpg'); ?>