source: branches/comu-utf8/data/class/GC_MobileImage.php @ 16100

Revision 16100, 2.8 KB checked in by adachi, 15 years ago (diff)

set property

  • Property svn:eol-style set to LF
  • Property svn:keywords set to Id
  • Property svn:mime-type set to text/x-httpd-php; charset=UTF-8
Line 
1<?php
2/**
3 *
4 * Copyright(c) 2000-2007 LOCKON CO.,LTD. All Rights Reserved.
5 *
6 * http://www.lockon.co.jp/
7 *
8 *
9 *
10 * 端末の画面解像度にあわせて画像を変換する
11 */
12
13define("MOBILE_IMAGE_INC_PATH", realpath(dirname( __FILE__)) . "/../include");
14require_once(MOBILE_IMAGE_INC_PATH . "/image_converter.inc");
15
16/**
17 * 画像変換クラス
18 */
19class GC_MobileImage {
20    /**
21     * 画像を端末の解像度に合わせて変換する
22     * output buffering 用コールバック関数
23     *
24     * @param string 入力
25     * @return string 出力
26     */
27    function handler($buffer) {
28
29        // 端末情報を取得する
30        $carrier = GC_MobileUserAgent::getCarrier();
31        $model   = GC_MobileUserAgent::getModel();
32
33        // 携帯電話の場合のみ処理を行う
34        if ($carrier !== FALSE) {
35
36            // HTML中のIMGタグを取得する
37            $pattern = '/<img\s+src=[\'"]([^>"]+)[\'"]\s*\/*>/i';
38            $result = preg_match_all($pattern, $buffer, $images);
39
40            // 端末の情報を取得する
41            $fp = fopen(MOBILE_IMAGE_INC_PATH . "/mobile_image_map_$carrier.csv", "r");
42            while (($data = fgetcsv($fp, 1000, ",")) !== FALSE) {
43                if ($data[1] == $model || $data[1] == '*') {
44                    $cacheSize     = $data[2];
45                    $imageFileSize = $data[7];
46                    $imageType     = $data[6];
47                    $imageWidth    = $data[5];
48                    break;
49                }
50            }
51            fclose($fp);
52
53            // docomoとsoftbankの場合は画像ファイル一つに利用可能なサイズの上限を計算する
54            // auはHTMLのbyte数上限に画像ファイルサイズが含まれないのでimageFileSizeのまま。
55            if ($carrier == "docomo" or $carrier == "softbank") {
56                // 計算式:(利用端末で表示可能なcacheサイズ - HTMLのバイト数 - 変換後の画像名のバイト数(目安値) ) / HTML中の画像数
57                $temp_imagefilesize = ($cacheSize - strlen($buffer) - (140 * $result) ) / $result;
58                // 計算結果が端末の表示可能ファイルサイズ上限より小さい場合は計算結果の値を有効にする
59                if ($temp_imagefilesize < $imageFileSize) {
60                    $imageFileSize = $temp_imagefilesize;
61                }
62            }
63
64            // 画像変換の情報をセットする
65            $imageConverter = New ImageConverter();
66            $imageConverter->setOutputDir(MOBILE_IMAGE_DIR);
67            $imageConverter->setImageType($imageType);
68            $imageConverter->setImageWidth($imageWidth);
69            $imageConverter->setFileSize($imageFileSize);
70
71            // HTML中のIMGタグを変換後のファイルパスに置換する
72            foreach ($images[1] as $key => $value) {
73                $converted = $imageConverter->execute(preg_replace('|^' . URL_DIR . '|', HTML_PATH, $value));
74                if (isset($converted['outputImageName'])) {
75                    $buffer = str_replace($value, MOBILE_IMAGE_URL . '/' . $converted['outputImageName'], $buffer);
76                } else {
77                    $buffer = str_replace($images[0][$key], '<!--No image-->', $buffer);
78                }
79            }
80        }
81        return $buffer;
82    }
83}
84?>
Note: See TracBrowser for help on using the repository browser.