Linux/Windows上のPHP / ImageMagickで、画像のサムネイルを作成/表示と、Lightbox2で拡大表示

###Lightbox2について
http://lokeshdhakar.com/projects/lightbox2/
から入手。

###やりたかった事
Linux/Windows上のPHP / ImageMagickで、画像のサムネイルを作成/表示と、Lightbox2で拡大表示。同じソースにて。

###以下、ソース

```PHP
<?php
print <<< _HTML_
<!DOCTYPE html>
<html lang="ja">
<head>
<link rel="stylesheet" type="text/css" href="./css/lightbox.css" />
<meta charset="UTF-8"/>
<title>画像を表示</title>
</head>
<body>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<script type="text/javascript"  src="./js/lightbox.js"></script>
<h1>画像を表示する</h1>
_HTML_;

      if (PHP_OS == "WIN32" || PHP_OS == "WINNT") {
        $bmp_img = mb_convert_encoding("$bmp_img", "utf8", "cp932"); //文字コード変換
      }
      //WindowsOSここまで
      $work_dir2 = "work/";
      $work_img= dirname(__FILE__)."/".$work_dir2.$bmp_img
      $temp_img= dirname(__FILE__)."/".$work_dir2."temp.jpg";
      // 出力する画像サイズの指定
      $width = 300;
      if (PHP_OS == "WIN32" || PHP_OS == "WINNT") {
        $work_img = mb_convert_encoding("$work_img", "cp932", "utf8"); //文字コード変換
      }
      list($imagick_w, $imagick_h) = getimagesize($work_img);
      //元画像の比率を計算し、高さを設定
      $proportion = $imagick_w / $imagick_h;
      $height = $width / $proportion;
      //高さが幅より大きい場合は、高さを幅に合わせ、横幅を縮小
      if($proportion < 1){
        $height = $width;
        $width = $width * $proportion;
      }
      if (PHP_OS == "WIN32" || PHP_OS == "WINNT") {
        $work_img = mb_convert_encoding("$work_img", "utf8", "cp932"); //文字コード変換
      }
      $imagick = new Imagick();
      $imagick->readImage($work_img);
      $imagick->setImageFormat('jpeg');
      //$imagick->stripImage();
      $imagick->resizeImage($width, $height, Imagick::FILTER_POINT, 0);
      $imagick->writeImage($temp_img);
      if($temp_img !== FALSE){
        print "<a href=\"work/".$bmp_img."\" data-lightbox=\"group\" data-title=\"".$bmp_img."\"><img src=\"work/temp.jpg\" alt=\"".$bmp_img ."のサムネイル\"></a></td>\n";
      }
      $imagick->clear();
      $imagick->destroy();
echo '</body>';
echo '</html>';

?>
```

###解説。

```php
<?php
print <<< _HTML_
<!DOCTYPE html>
<html lang="ja">
<head>
<link rel="stylesheet" type="text/css" href="./css/lightbox.css" />
<meta charset="UTF-8"/>
<title>画像を表示</title>
</head>
<body>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<script type="text/javascript"  src="./js/lightbox.js"></script>
<h1>画像を表示する</h1>
_HTML_;
```

ここについては、print <<<を使って楽してます。
意外だったのは、
```php
<link rel="stylesheet" type="text/css" href="./css/lightbox.css" />
```
を\<head\>の先頭に書かなきゃならない事、
つまりhtmlで位置制限あるの？？と言う事と、

```PHP
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<script type="text/javascript"  src="./js/lightbox.js"></script>
```
を\</body\>の、前、つまり\<body\>の後、って、通常は\<head\>\</head\>に書く場所なのでは、と思ったところ。

http://blog.raizzenet.com/how-to-use-lightbox2/
に感謝です。

```php
      if (PHP_OS == "WIN32" || PHP_OS == "WINNT") {
        $bmp_img = mb_convert_encoding("$bmp_img", "utf8", "cp932"); //文字コード変換
      }
```
Windowsの文字コード対応。

```PHP
      $work_dir2 = "work/";
      $work_img= dirname(__FILE__)."/".$work_dir2.$bmp_img
      // 出力する画像サイズの指定
      $width = 300;
      if (PHP_OS == "WIN32" || PHP_OS == "WINNT") {
        $work_img = mb_convert_encoding("$work_img", "cp932", "utf8"); //文字コード変換
      }
      list($imagick_w, $imagick_h) = getimagesize($work_img);
      //元画像の比率を計算し、高さを設定
      $proportion = $imagick_w / $imagick_h;
      $height = $width / $proportion;
      //高さが幅より大きい場合は、高さを幅に合わせ、横幅を縮小
      if($proportion < 1){
        $height = $width;
        $width = $width * $proportion;
      }
```

ここいらまでが、サムネイルの縦横比等をきめている。

```php
      if (PHP_OS == "WIN32" || PHP_OS == "WINNT") {
        $work_img = mb_convert_encoding("$work_img", "utf8", "cp932"); //文字コード変換
      }
      $imagick = new Imagick();
      $imagick->readImage($work_img);
      $imagick->setImageFormat('jpeg');
      //$imagick->stripImage();
      $imagick->resizeImage($width, $height, Imagick::FILTER_POINT, 0);
      $temp_img= dirname(__FILE__)."/".$work_dir2."temp.jpg";
      $imagick->writeImage($temp_img);
      if($temp_img !== FALSE){
        print "<a href=\"work/".$bmp_img."\" data-lightbox=\"group\" data-title=\"".$bmp_img."\"><img src=\"work/temp.jpg\"></a></td>\n";
      }
      $imagick->clear();
      $imagick->destroy();
echo '</body>';
echo '</html>';

?>
```

最もはまったのは、
\$imagick->writeImage($temp_img);
と
\<img src=\"work/temp.jpg\"\>
実はLinuxだと、いずれも'temp.jpg'で動いてしまう。
Windowsが問題であった。
そして前者はサーバローカルで見た時のフルパス、
後者がネット越しに見た時の相対パス、
の為にこうなっている。