php リサイズ

#画像を扱う前処理
```php:resize.php
ImageCreateFromJPEG($filename)
```
これでメモリ(このプログラム内)の中で扱える
#画像をリサイズ
```php:resize.php
bool imagecopyresampled(resource $dst_image,resource $src_image,
int $dst_x,int $dst_y,int $src_x,int $src_y,int 
$dst_w,int $dst_h,int $src_w,int $src_h)
```


パラメータ
dst_image
コピー先の画像リンクリソース。
src_image
コピー元の画像リンクリソース。
dst_x
コピー先の x 座標。
dst_y
コピー先の y 座標。
src_x
コピー元の x 座標。
src_y
コピー元の y 座標。
dst_w
コピー先の幅。
dst_h
コピー先の高さ。
src_w
コピー元の幅。
src_h
コピー元の高さ。

返り値
成功した場合に TRUE を、失敗した場合に FALSE を返します。




#画像を出力or 保存

```php:resize.php
bool imagejpeg ( resource $image [, string $filename [, int $quality ]] )
```

引数
image 
画像リソースを指定します。 

filename 
画像リソースをファイルに保存する場合、ファイル名を指定します。 
quality 
画像のクオリティを0（低品質）から100（高品質）で指定します。デフォルトは75です。 
返り値
画像の出力・作成に成功した場合は trueを、その他の場合は flaseを返します。


#実際にリサイズ
```php:resize.php
$filename = "画像パス"
if (mime_content_type($filename) == 'image/jpeg') {
          $image = ImageCreateFromJPEG($filename);
          $size = getimagesize($filename);
        }else {
          $image = ImageCreateFromPNG($filename);
          $size = getimagesize($filename);
        }



        //白紙の画像を作成
        $image2 = ImageCreateTrueColor(640, 480);
        //リサイズ処理
        imagecopyresampled($image2, $image, 0, 0, 0, 0, 640, 480, $size[0], $size[1]);

        //保存
        if (mime_content_type($filename) == 'image/jpeg') {
          imagejpeg($image2, $filename);
        }else {
          imagepng($image2, $filename);
        }

        //メモリ解放
        imagedestroy($image);
```
#リサイズ問題
原寸は「横400px・縦180px」だが、横幅(widthプロパティに「200px」が指定された結果、縦横比を維持して高さは「90px」になる。
どちらかを指定すれば自動で、元画像の比率を保ったまま高さor横が決められる


```css:resize.css
width: auto;
```

#リサイズ計算式
元の画像の横：X1、縦:Y1
リサイズ後の画像の横：X2、縦：Y2
とした時、
X2を任意の値にした時に、アスペクト比を保った状態でのY2の値は
Y2＝X2/X1*Y1

#実践
```php:resize.php
        //retinadisplay対応
        $resize_width = 462 * 2; //横幅決める
        $resize_height = $resize_width / $size[0] * $size[1]; //縦を比率崩さず出す
        //白紙の画像を作成
        $image2 = ImageCreateTrueColor($resize_width, $resize_height);
        //リサイズ処理
        imagecopyresampled($image2, $image, 0, 0, 0, 0, $resize_width, $resize_height, $size[0], $size[1]);

```



完成

```php:resize.php

if (mime_content_type($filename) == 'image/jpeg') {
          $image = ImageCreateFromJPEG($filename);
          $size = getimagesize($filename);
        }else {
          $image = ImageCreateFromPNG($filename);
          $size = getimagesize($filename);
        }


        //retinadisplay対応
        $resize_width = 462 * 2; //横幅決める
        $resize_height = $resize_width / $size[0] * $size[1]; //縦を比率崩さず出す
        //白紙の画像を作成
        $image2 = ImageCreateTrueColor($resize_width, $resize_height);

        $x = 0;
        $y = 0;
        $x = floor(($size[0] - $size[1]) / 2);	//切り取るx軸の中心
        $y = floor(($size[1] - $size[0]) / 2);	//切り取るx軸の中心
        //リサイズ処理
        imagecopyresampled($image2, $image, 0, 0, $x, $y, $resize_width, $resize_height, $size[0], $size[1]);

        //保存
        if (mime_content_type($filename) == 'image/jpeg') {
          imagejpeg($image2, $filename);
        }else {
          imagepng($image2, $filename);
        }

        //メモリ解放
        imagedestroy($image);
```

参考：https://blog.ver001.com/php_image_resize_object-fit/
https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q11117777576
https://qiita.com/mikakane/items/290301a308277a384c2d
http://iekasegu.work/column.php?no=144