画像リサイズ処理の修正
Showing
1 changed file
with
54 additions
and
47 deletions
... | @@ -1173,24 +1173,13 @@ class WFFileBrowser extends JObject | ... | @@ -1173,24 +1173,13 @@ class WFFileBrowser extends JObject |
1173 | 1173 | ||
1174 | // get uploaded file | 1174 | // get uploaded file |
1175 | $file = $app->input->files->get('file', array(), 'raw'); | 1175 | $file = $app->input->files->get('file', array(), 'raw'); |
1176 | $file['size'] = 40; | 1176 | |
1177 | // error_log("====================================================================================================================\n", 3, '/var/www/html/debug.log'); | ||
1178 | // error_log("outputed from " . __FILE__ . "\n", 3, '/var/www/html/debug.log'); | ||
1179 | // error_log('file = ', 3, '/var/www/html/debug.log'); | ||
1180 | // error_log(print_r($file, true) . "\n", 3, '/var/www/html/debug.log'); | ||
1181 | // error_log("====================================================================================================================\n", 3, '/var/www/html/debug.log'); | ||
1182 | // error_log("ここまで\n\n", 3, '/var/www/html/debug.log'); | ||
1183 | // validate file | 1177 | // validate file |
1184 | $this->validateUploadedFile($file); | 1178 | $this->validateUploadedFile($file); |
1185 | 1179 | ||
1186 | // get file name | 1180 | // get file name |
1187 | $name = (string) $app->input->get('name', $file['name'], 'STRING'); | 1181 | $name = (string) $app->input->get('name', $file['name'], 'STRING'); |
1188 | // error_log("====================================================================================================================\n", 3, '/var/www/html/debug.log'); | 1182 | |
1189 | // error_log("outputed from " . __FILE__ . "\n", 3, '/var/www/html/debug.log'); | ||
1190 | // error_log('name = ', 3, '/var/www/html/debug.log'); | ||
1191 | // error_log(print_r($name, true) . "\n", 3, '/var/www/html/debug.log'); | ||
1192 | // error_log("====================================================================================================================\n", 3, '/var/www/html/debug.log'); | ||
1193 | // error_log("ここまで\n\n", 3, '/var/www/html/debug.log'); | ||
1194 | // decode | 1183 | // decode |
1195 | $name = rawurldecode($name); | 1184 | $name = rawurldecode($name); |
1196 | 1185 | ||
... | @@ -1255,51 +1244,69 @@ class WFFileBrowser extends JObject | ... | @@ -1255,51 +1244,69 @@ class WFFileBrowser extends JObject |
1255 | $fieldid = (string) $app->input->get('fieldid', '', 'STRING'); | 1244 | $fieldid = (string) $app->input->get('fieldid', '', 'STRING'); |
1256 | // ファイルがイントロ画像としてアップロードされていることを確認 | 1245 | // ファイルがイントロ画像としてアップロードされていることを確認 |
1257 | if ($fieldid === 'jform_images_image_intro') { | 1246 | if ($fieldid === 'jform_images_image_intro') { |
1247 | |||
1258 | // tmpディレクトリに一時保存されているupload予定のファイルパスを取得 | 1248 | // tmpディレクトリに一時保存されているupload予定のファイルパスを取得 |
1259 | $tmp_file = $file['tmp_name']; | 1249 | $tmp_file = $file['tmp_name']; |
1260 | // 画像を取得 | ||
1261 | $img = file_get_contents($tmp_file); | ||
1262 | // 画像のエンコード | ||
1263 | $enc_img = base64_encode($img); | ||
1264 | // 画像URLを作成 | ||
1265 | $image_url = 'data:application/octet-stream;base64,' . $enc_img; | ||
1266 | 1250 | ||
1267 | // 画像情報を取得 | 1251 | // 画像情報を取得 |
1268 | $image_info = getimagesize($image_url); | 1252 | $image_info = getimagesize($tmp_file); |
1269 | // 画像情報から画像のサイズを取得 | 1253 | // 画像情報から画像の幅を取得 |
1270 | $width = (int) $image_info[0]; | 1254 | $width = (int) $image_info[0]; |
1271 | $height = (int) $image_info[1]; | ||
1272 | // 画像タイプを取得 | ||
1273 | $image_type = $image_info['mime']; | ||
1274 | // アスペクト比(縦横比を取得) | ||
1275 | $aspect_ratio = $height / $width; | ||
1276 | |||
1277 | // リサイズ後の幅を定義 | 1255 | // リサイズ後の幅を定義 |
1278 | $new_width = 1000; | 1256 | $new_width = 1000; |
1279 | // リサイズ後の高さを定義(アスペクト比を維持して定義) | 1257 | |
1280 | $new_height = 1000 * $aspect_ratio; | 1258 | // 登録する画像の幅がリサイズ後の幅(1000px)より大きいことを確認(1000px以上でリサイズ処理) |
1281 | 1259 | if ($width > $new_width) { | |
1282 | // 画像タイプがPNGか、JPEGであることを確認 | 1260 | |
1283 | if ($image_type === 'image/png' || $image_type === 'image/jpeg') { | 1261 | // 画像情報から画像の高さを取得 |
1284 | // 画像タイプがPNGの場合の処理 | 1262 | $height = (int) $image_info[1]; |
1285 | if ($image_type === 'image/png') { | 1263 | // 画像タイプを取得 |
1286 | // 元の画像から新しい画像を作る準備 | 1264 | $image_type = $image_info['mime']; |
1287 | $baseImage = imagecreatefrompng($image_url); | 1265 | // アスペクト比(縦横比を取得) |
1288 | // 画像タイプがJPEGの場合の処理 | 1266 | $aspect_ratio = $height / $width; |
1289 | } elseif ($image_type === 'image/jpeg') { | 1267 | // リサイズ後の高さを定義(アスペクト比を維持して定義) |
1290 | // 元の画像から新しい画像を作る準備 | 1268 | $new_height = $new_width * $aspect_ratio; |
1291 | $baseImage = imagecreatefromjpeg($image_url); | 1269 | |
1270 | $base_image = null; | ||
1271 | switch ($image_type) { | ||
1272 | // 画像タイプがPNGの場合の処理 | ||
1273 | case 'image/png': | ||
1274 | // 元の画像から新しい画像を作る準備 | ||
1275 | $base_image = imagecreatefrompng($tmp_file); | ||
1276 | break; | ||
1277 | // 画像タイプがJPEGの場合の処理 | ||
1278 | case 'image/jpeg': | ||
1279 | // 元の画像から新しい画像を作る準備 | ||
1280 | $base_image = imagecreatefromjpeg($tmp_file); | ||
1281 | break; | ||
1282 | default: | ||
1283 | break; | ||
1284 | } | ||
1285 | |||
1286 | // $base_imageがnullから更新されている場合を確認 | ||
1287 | if ($base_image) { | ||
1288 | // サイズを指定して新しい画像のキャンバスを作成 | ||
1289 | $new_image = imagecreatetruecolor($new_width, $new_height); | ||
1290 | // 画像のコピーと伸縮 | ||
1291 | imagecopyresampled($new_image, $base_image, 0, 0, 0, 0, $new_width, $new_height, $width, $height); | ||
1292 | switch ($image_type) { | ||
1293 | // 画像タイプがPNGの場合の処理 | ||
1294 | case 'image/png': | ||
1295 | // コピーした画像を出力 | ||
1296 | imagepng($new_image, $tmp_file); | ||
1297 | break; | ||
1298 | // 画像タイプがJPEGの場合の処理 | ||
1299 | case 'image/jpeg': | ||
1300 | // コピーした画像を出力 | ||
1301 | imagejpeg($new_image, $tmp_file); | ||
1302 | break; | ||
1303 | default: | ||
1304 | break; | ||
1305 | } | ||
1292 | } | 1306 | } |
1293 | // サイズを指定して新しい画像のキャンバスを作成 | ||
1294 | $image = imagecreatetruecolor($new_width, $new_height); | ||
1295 | // 画像のコピーと伸縮 | ||
1296 | imagecopyresampled($image, $baseImage, 0, 0, 0, 0, $new_width, $new_height, $width, $height); | ||
1297 | // コピーした画像を出力 | ||
1298 | imagejpeg($image , $tmp_file); | ||
1299 | } | 1307 | } |
1300 | } | 1308 | } |
1301 | 1309 | ||
1302 | |||
1303 | // Check total file size limit | 1310 | // Check total file size limit |
1304 | if (!empty($upload['total_size'])) { | 1311 | if (!empty($upload['total_size'])) { |
1305 | $size = $filesystem->getTotalSize($dir); | 1312 | $size = $filesystem->getTotalSize($dir); | ... | ... |
-
Please register or sign in to post a comment