質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

リサイズ

コントロール、ウィンドウ、フォームやスクリーンのサイズ変更を指します。

保存

保存(save)とは、特定のファイルを、ハードディスク等の外部記憶装置に記録する行為を指します。

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

Q&A

0回答

995閲覧

php jpg画像をリサイズ・再圧縮?してギリギリ指定サイズ以下にして保存したい

退会済みユーザー

退会済みユーザー

総合スコア0

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

リサイズ

コントロール、ウィンドウ、フォームやスクリーンのサイズ変更を指します。

保存

保存(save)とは、特定のファイルを、ハードディスク等の外部記憶装置に記録する行為を指します。

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

0グッド

1クリップ

投稿2021/12/30 11:46

前提・実現したいこと

初心者、非プログラマです。
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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問