前提・実現したいこと
初心者、非プログラマです。
jpg画像をリサイズ・再圧縮?して指定サイズにして保存したいです。
幾つかのサイトを参考にして指定サイズ以下になるまでリサイズ・保存を繰り返すループは出来ましたが問題があります。
指定サイズ以下にして保存は出来ますが、指定サイズにする方法は分からないです。
処理もローカルホストなので?5-6回ほどのループで5秒前後で済みますが、www上のサーバーで動かすときも同じように考えていいのかわかりません。
このやりかたが一般的なのかも判断できません。
またいろいろとエラートラップが必要になると思いますが、どのようなものが必要か理解できていません。
コードの不備、補足、参考などご意見いただければと思います。
またご指導頂きたく思いますが、こちらの知識・理解力不足にてご意見いただけたこと理解できない可能性もあります。
その節はご容赦頂ければ幸いです。
該当のソースコード
php
1<?php 2 3// 元画像 4$filename = 'test2.jpg'; 5 6// 新規サイズを取得 7list($width, $height) = getimagesize($filename); 8 9//大まかに長辺を決める 10$piece_length = 600; 11 12//リネーム用の名前を作成 13$target = $filename; 14$new_filename = pathinfo($target, PATHINFO_FILENAME); 15$new_date = date('ymd_His'); //現在時刻 16$new_filename = $new_filename . '_' . $new_date . '.jpg'; 17 18 19// 再サンプル50kb以下になるまで繰り返し 20do { 21 22//filesize取得のキャッシュクリア 23 clearstatcache(); 24 25 //長辺が縦横どちらか判定 26 if ($width > $height) { 27 $new_width = $piece_length; 28 $new_height = $piece_length / $width * $height; 29 } else { 30 $new_height = $piece_length; 31 $new_width = $piece_length / $height * $width; 32 } 33 34 //イメージファイル作成 35 //この辺は理屈が分からず、参考サイトのままです。 36 //1で空のカンバスのようなものを作って、2で新しく画像ファイルを作って、3で1のカンバスに元画像からコピーを張り付ける? 37 //そうすると特に2の意味が分かりません 38 $new_image = imagecreatetruecolor($new_width, $new_height); //1 39 $image = imagecreatefromjpeg($filename); //2 40 imagecopyresampled($new_image, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height); //3 41 42 //ファイルに出力 43 //ここも参考サイトの中には ob_start(); でバッファ出力?のサイズでループして、最後に画面に出力しているコードも見ましたが 44 //最後、画面出力でなくファイルに保存する方法が分かりませんでした。 45 //また、バッファ出力のほうがいいのか、ファイル保存でもいいのか判断できません。 46 imagejpeg($new_image, $new_filename, 90); 47 48 //長辺を-50する 49 $piece_length = $piece_length - 50; 50 //ファイルサイズが50kb以下になるまで繰り返す 51 } while (filesize($new_filename) >51200); 52 53echo 'loop終わり'; 54 55//画像のファイル保存は以上で終わりますが、わかりやすくするために画像を画面に出力したいのですが、 56//画面が真っ暗になります または真っ暗になり中央に小さな白い正方形が出来ます。 57header('Content-Type: image/jpeg'); 58imagejpeg($new_image, null, 90); 59 60 61?> 62
補足情報(FW/ツールのバージョンなど)
windows10 homeにXAMPPにて学習環境を用意してローカルホストで処理しています。
PHP Version 8.0.10
Server version: Apache/2.4.48 (Win64)
Apache Lounge VS16 Server built: Aug 25 2021 12:07:35
あなたの回答
tips
プレビュー