写真のアップロードし、サーバー容量を節約するために画像圧縮した上でリサイズして保管するといったことをする際のMEMOです。
で構築したubuntuのサーバーで行うことを前提にしています。
アップロードできるサイズの許容量をあげる
デフォルトで2MBになっているので、最近のスマホで撮った画像などがこの容量を超えてアップロードできないので、まずここを変えておきます。
php.ini の中の記述を書き換えてサーバー再起動。
sudo vi /etc/php/8.1/apache2/php.ini
でphp.iniを開き、「/」を押して検索状態に入り、「upload_max_filesize」をペーストして、場所を見つけたら ENTERキーでその場所に移動。「i」を押して、編集状態にして、「10MB」程度に書き換えて、「:wq!」で保存。
sudo systemctl restart apache2
でサーバー再起動。
gd(GIF Draw:画像圧縮やリサイズ)
Php8.1-gdを入れておく。
apt search php8.1 | grep php8.1
php8.1-gd/jammy-updates,jammy-security 8.1.2-1ubuntu2.19 amd64 が見つかるので、インストール
sudo apt install php8.1-gd
画像圧縮とリサイズを行う関数
保存するディレクトリとファイル名、縦横いずれかの最大ピクセル数(省略すると800px)を引数として渡して、既存のファイルを上書きする関数をMEMOしておきます。戻り値は、メッセージ文字列です。
function resizeFilePath($img_save_path, $theFileName, $maxSizePx = 800){
// 画像をリサイズする関数
function resizeImage($_filePath, $_maxSize) {
list($origWidth, $origHeight) = getimagesize($_filePath);
$ratio = $origWidth / $origHeight;
// 新しいサイズを計算(縦横比を維持し、最大幅または高さを800pxにする)
if ($origWidth > $origHeight) {
$newWidth = $_maxSize;
$newHeight = $_maxSize / $ratio;
} else {
$newHeight = $_maxSize;
$newWidth = $_maxSize * $ratio;
}
// 元の画像リソースを作成
$image = imagecreatefromstring(file_get_contents($_filePath));
$resizedImage = imagecreatetruecolor($newWidth, $newHeight);
// 画像をリサイズ
imagecopyresampled($resizedImage, $image, 0, 0, 0, 0, $newWidth, $newHeight, $origWidth, $origHeight);
imagedestroy($image);
return $resizedImage;
}
$filePath = $img_save_path.DS.$theFileName;
$fileType = mime_content_type($filePath);
// 画像タイプのチェック(JPEGとPNGに対応)
if ($fileType === 'image/jpeg' || $fileType === 'image/png') {
// 画像のリサイズ
$resizedImage = resizeImage($filePath, $maxSizePx); // 最大幅または高さを800pxにリサイズ
// 解像度を72 DPIに設定
imageresolution($resizedImage, 72, 72);
// 圧縮率を指定して元のファイルに上書き保存(JPEGの場合は圧縮率、PNGの場合は圧縮レベル)
if ($fileType === 'image/jpeg') {
imagejpeg($resizedImage, $filePath, 75); // 75は圧縮率
} else if ($fileType === 'image/png') {
imagepng($resizedImage, $filePath, 8); // 0-9の範囲で圧縮(9が最大圧縮)
}
// メモリを解放
imagedestroy($resizedImage);
return '画像がリサイズおよび圧縮され、保存されました: '; //. $filePath;
} else {
return 'JPEGまたはPNG画像のみ対応しています。';
}
}
以上
東京造形大学卒業後、マクロメディア(現アドビ)に入社。QAやテクニカルサポートマネージャーとしてFlash、DreamweaverなどのWeb製品を担当。独立後、2007年に虫カゴデザインスタジオ株式会社を設立。2021年東京三鷹を拠点に。最近は、Unity, Unity Netcode for GameObjects, CakePHP, Laravel, ZBrush, Modo, Adobe Substance 3D, Adobe Firefly, Xcode, Apple Vision Pro, Firebaseにフォーカスしています。モバイルアプリ開発情報を主としたブログ「MUSHIKAGO APPS MEMO」の中の人。