いくつかのテキスト入力とファイルのアップロードを含むフォームがあります。フォームはうまく機能し、ファイルをアップロードする場所にアップロードし、データベース内のそのファイルへの参照を追加します。
問題は、画像が巨大なことです。そのため、フォームで画像をフルサイズでアップロードし続けたいと思いますが、フロントエンドにサムネイルとして表示できる別のフォルダーに最適化されたバージョンもアップロードしたいと考えています。
Image Optimization in PHP (2017 年 5 月 Prosper Otemuyiwa、Cloudinary ブログ)のコードを実装しようとしています。
私が使用しているコードでは、GD をインストールする必要があります。私のホストによると、そうです。
これは私のfunctions.php
ファイルにあります:
function compress_image($source_url, $destination_url, $quality) { // optimizes images
$info = getimagesize($source_url);
if ($info['mime'] == 'image/jpeg')
$image = imagecreatefromjpeg($source_url);
elseif ($info['mime'] == 'image/gif')
$image = imagecreatefromgif($source_url);
elseif ($info['mime'] == 'image/png')
$image = imagecreatefrompng($source_url);
imagejpeg($image, $destination_url, $quality);
return $destination_url;
}
ここに私のフォーム/phpがあります:
<?php
if(isset($_POST['create_post'])) {
$portfolio_title = $_POST['portfolio_title'];
$portfolio_tagline = $_POST['portfolio_tagline'];
$portfolio_image = $_FILES['image']['name'];
$portfolio_image_temp = $_FILES['image']['tmp_name'];
move_uploaded_file($portfolio_image_temp, "../images/$portfolio_image");
$src_url = '../images/$portfolio_image';
$destination_url = '../images/thumbnails/$portfolio_image';
compress_image($src_url, $destination_url, 60);
$query = "INSERT INTO portfolio(portfolio_title, portfolio_tagline, portfolio_image) ";
$query .= "VALUES('{$portfolio_title}','{$portfolio_tagline}','{$portfolio_image}' ) ";
$create_post_query = mysqli_query($connection, $query);
confirm($create_post_query);
};
?>
<form action="" method="post" enctype="multipart/form-data">
<!-- enctype is because we're uploading an image -->
<div class="form-group">
<label for="portfolio_title">Title</label>
<input type="text" class="form-control" name="portfolio_title">
</div>
<div class="form-group">
<label for="portfolio_tagline">Tagline</label>
<input type="text" class="form-control" name="portfolio_tagline">
</div>
<div class="form-group">
<label for="portfolio_image">Image</label>
<input type="file" class="form-control" name="image">
</div>
<div class="form-group">
<input type="submit" class="btn btn-primary" name="create_post" value="Publish">
</div>
</form>
私は、compress_image 関数が新しくアップロードされたイメージを $src_image としてプルし、最適化されたファイルを $destination_url に保存することを望んでいますが、次のエラーが発生します。
警告: getimagesize(../images/$portfolio_image): ストリームを開けませんでした: No such file or directory in /home/playground/public_html/bootstrap-template/admin/functions.php 行 15
警告: imagejpeg() は、パラメーター 1 がリソースであることを想定しています。null は、26 行目の /home/playground/public_html/bootstrap-template/admin/functions.php で指定されています