PHPで画像のサイズを変更する
フォームを介してアップロードされた画像を147x147pxに自動的にサイズ変更するPHPコードを書きたいのですが、どうすればよいかわかりません(私は比較的PHPの初心者です)。
これまでのところ、画像のアップロードは正常に行われ、ファイルタイプが認識され、名前がクリーンアップされていますが、コードにサイズ変更機能を追加したいと思います。たとえば、2.3 MB、サイズが1331x1331のテスト画像があり、コードのサイズを小さくしたいのですが、画像のファイルサイズも大幅に圧縮されると思います。
これまでのところ、私は次のものを持っています:
if ($_FILES) {
//Put file properties into variables
$file_name = $_FILES['profile-image']['name'];
$file_size = $_FILES['profile-image']['size'];
$file_tmp_name = $_FILES['profile-image']['tmp_name'];
//Determine filetype
switch ($_FILES['profile-image']['type']) {
case 'image/jpeg': $ext = "jpg"; break;
case 'image/png': $ext = "png"; break;
default: $ext = ''; break;
}
if ($ext) {
//Check filesize
if ($file_size < 500000) {
//Process file - clean up filename and move to safe location
$n = "$file_name";
$n = ereg_replace("[^A-Za-z0-9.]", "", $n);
$n = strtolower($n);
$n = "avatars/$n";
move_uploaded_file($file_tmp_name, $n);
} else {
$bad_message = "Please ensure your chosen file is less than 5MB.";
}
} else {
$bad_message = "Please ensure your image is of filetype .jpg or.png.";
}
}
$query = "INSERT INTO users (image) VALUES ('$n')";
mysql_query($query) or die("Insert failed. " . mysql_error() . "<br />" . $query);
答え :
解決:
画像を操作するには、PHPのImageMagick関数またはGD関数のいずれかを使用する必要があります。
たとえば、GDを使用すると、次のように簡単になります...
function resize_image($file, $w, $h, $crop=FALSE) {
list($width, $height) = getimagesize($file);
$r = $width / $height;
if ($crop) {
if ($width > $height) {
$width = ceil($width-($width*abs($r-$w/$h)));
} else {
$height = ceil($height-($height*abs($r-$w/$h)));
}
$newwidth = $w;
$newheight = $h;
} else {
if ($w/$h > $r) {
$newwidth = $h*$r;
$newheight = $h;
} else {
$newheight = $w/$r;
$newwidth = $w;
}
}
$src = imagecreatefromjpeg($file);
$dst = imagecreatetruecolor($newwidth, $newheight);
imagecopyresampled($dst, $src, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
return $dst;
}
そして、あなたはそのようにこの関数を呼び出すことができます...
$img = resize_image(‘/path/to/some/image.jpg’, 200, 200);
個人的な経験から、GDの画像リサンプリングは、特に生のデジタルカメラ画像をリサンプリングするときに、ファイルサイズも劇的に削減します。
答え :
解決:
PHPのGD関数( imagescaleなど)を使用するだけです。
構文:
imagescale ( $image , $new_width , $new_height )
例:
ステップ:1ファイルを読みます
$image_name = 'path_of_Image/Name_of_Image.jpg|png|gif';
ステップ:2:画像ファイルをロードする
$image = imagecreatefromjpeg($image_name); // For JPEG
//or
$image = imagecreatefrompng($image_name); // For PNG
//or
$image = imagecreatefromgif($image_name); // For GIF
ステップ:3:私たちの命の恩人は「_」でやってくる|画像を拡大縮小する
$imgResized = imagescale($image , 500, 400); // width=500 and height = 400
// $imgResized is our final product
注:imagescaleは(PHP 5> = 5.5.0、PHP 7)で機能します
手順:4:サイズ変更した画像を目的のディレクトリに保存します。
imagejpeg($imgResized, 'path_of_Image/Name_of_Image_resized.jpg'); //for jpeg
imagepng($imgResized, 'path_of_Image/Name_of_Image_resized.png'); //for png
出典:クリックして続きを読む
答え :
解決:
このリソース(リンク切れ)も検討する価値があります-GDを使用する非常に整頓されたコード。ただし、最終的なコードスニペットを変更して、OPの要件を満たすこの関数を作成しました...
function store_uploaded_image($html_element_name, $new_img_width, $new_img_height) {
$target_dir = "your-uploaded-images-folder/";
$target_file = $target_dir . basename($_FILES[$html_element_name]["name"]);
$image = new SimpleImage();
$image->load($_FILES[$html_element_name]['tmp_name']);
$image->resize($new_img_width, $new_img_height);
$image->save($target_file);
return $target_file; //return name of saved file in case you want to store it in you database or show confirmation message to user
}
このPHPファイルも含める必要があります...
<?php
/*
* File: SimpleImage.php
* Author: Simon Jarvis
* Copyright: 2006 Simon Jarvis
* Date: 08/11/06
* Link: http://www.white-hat-web-design.co.uk/blog/resizing-images-with-php/
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details:
* http://www.gnu.org/licenses/gpl.html
*
*/
class SimpleImage {
var $image;
var $image_type;
function load($filename) {
$image_info = getimagesize($filename);
$this->image_type = $image_info[2];
if( $this->image_type == IMAGETYPE_JPEG ) {
$this->image = imagecreatefromjpeg($filename);
} elseif( $this->image_type == IMAGETYPE_GIF ) {
$this->image = imagecreatefromgif($filename);
} elseif( $this->image_type == IMAGETYPE_PNG ) {
$this->image = imagecreatefrompng($filename);
}
}
function save($filename, $image_type=IMAGETYPE_JPEG, $compression=75, $permissions=null) {
if( $image_type == IMAGETYPE_JPEG ) {
imagejpeg($this->image,$filename,$compression);
} elseif( $image_type == IMAGETYPE_GIF ) {
imagegif($this->image,$filename);
} elseif( $image_type == IMAGETYPE_PNG ) {
imagepng($this->image,$filename);
}
if( $permissions != null) {
chmod($filename,$permissions);
}
}
function output($image_type=IMAGETYPE_JPEG) {
if( $image_type == IMAGETYPE_JPEG ) {
imagejpeg($this->image);
} elseif( $image_type == IMAGETYPE_GIF ) {
imagegif($this->image);
} elseif( $image_type == IMAGETYPE_PNG ) {
imagepng($this->image);
}
}
function getWidth() {
return imagesx($this->image);
}
function getHeight() {
return imagesy($this->image);
}
function resizeToHeight($height) {
$ratio = $height / $this->getHeight();
$width = $this->getWidth() * $ratio;
$this->resize($width,$height);
}
function resizeToWidth($width) {
$ratio = $width / $this->getWidth();
$height = $this->getheight() * $ratio;
$this->resize($width,$height);
}
function scale($scale) {
$width = $this->getWidth() * $scale/100;
$height = $this->getheight() * $scale/100;
$this->resize($width,$height);
}
function resize($width,$height) {
$new_image = imagecreatetruecolor($width, $height);
imagecopyresampled($new_image, $this->image, 0, 0, 0, 0, $width, $height, $this->getWidth(), $this->getHeight());
$this->image = $new_image;
}
}
?>
答え :
解決:
アスペクト比を気にしない場合(つまり、画像を特定の寸法に強制したい場合)、ここに簡単な答えがあります
// for jpg
function resize_imagejpg($file, $w, $h) {
list($width, $height) = getimagesize($file);
$src = imagecreatefromjpeg($file);
$dst = imagecreatetruecolor($w, $h);
imagecopyresampled($dst, $src, 0, 0, 0, 0, $w, $h, $width, $height);
return $dst;
}
// for png
function resize_imagepng($file, $w, $h) {
list($width, $height) = getimagesize($file);
$src = imagecreatefrompng($file);
$dst = imagecreatetruecolor($w, $h);
imagecopyresampled($dst, $src, 0, 0, 0, 0, $w, $h, $width, $height);
return $dst;
}
// for gif
function resize_imagegif($file, $w, $h) {
list($width, $height) = getimagesize($file);
$src = imagecreatefromgif($file);
$dst = imagecreatetruecolor($w, $h);
imagecopyresampled($dst, $src, 0, 0, 0, 0, $w, $h, $width, $height);
return $dst;
}
それでは、アップロード部分を処理しましょう。最初のステップでは、ファイルを目的のディレクトリにアップロードします。次に、ファイルタイプ(jpg、png、またはgif)に基づいて上記の関数のいずれかを呼び出し、アップロードされたファイルの絶対パスを次のように渡します。
// jpg change the dimension 750, 450 to your desired values
$img = resize_imagejpg('path/image.jpg', 750, 450);
戻り値$img
はリソースオブジェクトです。以下のように、新しい場所に保存するか、元の場所を上書きすることができます。
// again for jpg imagejpeg($img, 'path/newimage.jpg');
これが誰かを助けることを願っています。 Imagick :: resizeImageおよびimagejpeg()のサイズ変更の詳細については、これらのリンクを確認してください
答え :
解決:
私はあなたのために働くことを願っています。
/**
* Image re-size
* @param int $width
* @param int $height
*/
function ImageResize($width, $height, $img_name)
{
/* Get original file size */
list($w, $h) = getimagesize($_FILES['logo_image']['tmp_name']);
/*$ratio = $w / $h;
$size = $width;
$width = $height = min($size, max($w, $h));
if ($ratio < 1) {
$width = $height * $ratio;
} else {
$height = $width / $ratio;
}*/
/* Calculate new image size */
$ratio = max($width/$w, $height/$h);
$h = ceil($height / $ratio);
$x = ($w - $width / $ratio) / 2;
$w = ceil($width / $ratio);
/* set new file name */
$path = $img_name;
/* Save image */
if($_FILES['logo_image']['type']=='image/jpeg')
{
/* Get binary data from image */
$imgString = file_get_contents($_FILES['logo_image']['tmp_name']);
/* create image from string */
$image = imagecreatefromstring($imgString);
$tmp = imagecreatetruecolor($width, $height);
imagecopyresampled($tmp, $image, 0, 0, $x, 0, $width, $height, $w, $h);
imagejpeg($tmp, $path, 100);
}
else if($_FILES['logo_image']['type']=='image/png')
{
$image = imagecreatefrompng($_FILES['logo_image']['tmp_name']);
$tmp = imagecreatetruecolor($width,$height);
imagealphablending($tmp, false);
imagesavealpha($tmp, true);
imagecopyresampled($tmp, $image,0,0,$x,0,$width,$height,$w, $h);
imagepng($tmp, $path, 0);
}
else if($_FILES['logo_image']['type']=='image/gif')
{
$image = imagecreatefromgif($_FILES['logo_image']['tmp_name']);
$tmp = imagecreatetruecolor($width,$height);
$transparent = imagecolorallocatealpha($tmp, 0, 0, 0, 127);
imagefill($tmp, 0, 0, $transparent);
imagealphablending($tmp, true);
imagecopyresampled($tmp, $image,0,0,0,0,$width,$height,$w, $h);
imagegif($tmp, $path);
}
else
{
return false;
}
return true;
imagedestroy($image);
imagedestroy($tmp);
}
答え :
解決:
(重要:アニメーション(アニメーション化されたwebpまたはgif)のサイズ変更の場合、結果はアニメーション化されませんが、最初のフレームからサイズ変更された画像になります!(元のアニメーションはそのまま残ります...)
私は、PHP 7.2のプロジェクト(例えばimagebmpは、必ず(PHP 7> = 7.2.0):これを作成したPHP /マニュアル/ function.imagebmp )についてtechfry.com/php-tutorial 、GD2と、(何もサードパーティのライブラリそう)とNico Bistolfiの回答と非常に似ていますが、5つの基本的な画像mimetype( png、jpeg、webp、bmp、gif )すべてで動作し、元のファイルを変更せずに新しいサイズ変更されたファイルを作成します。すぐに使用できます(プロジェクトにコピーして貼り付けます)。 (5番目のパラメーターを使用して新しいファイルの拡張子を設定するか、元のファイルを保持したい場合はそのままにしておくことができます):
function createResizedImage(
string $imagePath = '',
string $newPath = '',
int $newWidth = 0,
int $newHeight = 0,
string $outExt = 'DEFAULT'
) : ?string
{
if (!$newPath or !file_exists ($imagePath)) {
return null;
}
$types = [IMAGETYPE_JPEG, IMAGETYPE_PNG, IMAGETYPE_GIF, IMAGETYPE_BMP, IMAGETYPE_WEBP];
$type = exif_imagetype ($imagePath);
if (!in_array ($type, $types)) {
return null;
}
list ($width, $height) = getimagesize ($imagePath);
$outBool = in_array ($outExt, ['jpg', 'jpeg', 'png', 'gif', 'bmp', 'webp']);
switch ($type) {
case IMAGETYPE_JPEG:
$image = imagecreatefromjpeg ($imagePath);
if (!$outBool) $outExt = 'jpg';
break;
case IMAGETYPE_PNG:
$image = imagecreatefrompng ($imagePath);
if (!$outBool) $outExt = 'png';
break;
case IMAGETYPE_GIF:
$image = imagecreatefromgif ($imagePath);
if (!$outBool) $outExt = 'gif';
break;
case IMAGETYPE_BMP:
$image = imagecreatefrombmp ($imagePath);
if (!$outBool) $outExt = 'bmp';
break;
case IMAGETYPE_WEBP:
$image = imagecreatefromwebp ($imagePath);
if (!$outBool) $outExt = 'webp';
}
$newImage = imagecreatetruecolor ($newWidth, $newHeight);
//TRANSPARENT BACKGROUND
$color = imagecolorallocatealpha ($newImage, 0, 0, 0, 127); //fill transparent back
imagefill ($newImage, 0, 0, $color);
imagesavealpha ($newImage, true);
//ROUTINE
imagecopyresampled ($newImage, $image, 0, 0, 0, 0, $newWidth, $newHeight, $width, $height);
// Rotate image on iOS
if(function_exists('exif_read_data') && $exif = exif_read_data($imagePath, 'IFD0'))
{
if(isset($exif['Orientation']) && isset($exif['Make']) && !empty($exif['Orientation']) && preg_match('/(apple|ios|iphone)/i', $exif['Make'])) {
switch($exif['Orientation']) {
case 8:
if ($width > $height) $newImage = imagerotate($newImage,90,0);
break;
case 3:
$newImage = imagerotate($newImage,180,0);
break;
case 6:
$newImage = imagerotate($newImage,-90,0);
break;
}
}
}
switch (true) {
case in_array ($outExt, ['jpg', 'jpeg']): $success = imagejpeg ($newImage, $newPath);
break;
case $outExt === 'png': $success = imagepng ($newImage, $newPath);
break;
case $outExt === 'gif': $success = imagegif ($newImage, $newPath);
break;
case $outExt === 'bmp': $success = imagebmp ($newImage, $newPath);
break;
case $outExt === 'webp': $success = imagewebp ($newImage, $newPath);
}
if (!$success) {
return null;
}
return $newPath;
}
答え :
解決:
画像サイズ変更用の使いやすいライブラリを作成しました。ここGithubで見つけることができます。
ライブラリの使用方法の例:
// Include PHP Image Magician library
require_once('php_image_magician.php');
// Open JPG image
$magicianObj = new imageLib('racecar.jpg');
// Resize to best fit then crop (check out the other options)
$magicianObj -> resizeImage(100, 200, 'crop');
// Save resized image as a PNG (or jpg, bmp, etc)
$magicianObj -> saveImage('racecar_small.png');
その他の機能は、必要に応じて次のとおりです。
- すばやく簡単にサイズ変更-横向き、縦向き、または自動にサイズ変更
- 簡単なトリミング
- テキストを追加
- 品質調整
- 透かし
- 影と反射
- 透明性のサポート
- EXIFメタデータを読む
- 境界線、丸みを帯びた角、回転
- フィルタと効果
- 画像の鮮明化
- 画像型変換
- BMPサポート
答え :
解決:
私はこの仕事を成し遂げるための数学的な方法を見つけました
Githubリポジトリ-https ://github.com/gayanSandamal/easy-php-image-resizer
実例-https://plugins.nayague.com/easy-php-image-resizer/
<?php
//path for the image
$source_url = '2018-04-01-1522613288.PNG';
//separate the file name and the extention
$source_url_parts = pathinfo($source_url);
$filename = $source_url_parts['filename'];
$extension = $source_url_parts['extension'];
//define the quality from 1 to 100
$quality = 10;
//detect the width and the height of original image
list($width, $height) = getimagesize($source_url);
$width;
$height;
//define any width that you want as the output. mine is 200px.
$after_width = 200;
//resize only when the original image is larger than expected with.
//this helps you to avoid from unwanted resizing.
if ($width > $after_width) {
//get the reduced width
$reduced_width = ($width - $after_width);
//now convert the reduced width to a percentage and round it to 2 decimal places
$reduced_radio = round(($reduced_width / $width) * 100, 2);
//ALL GOOD! let's reduce the same percentage from the height and round it to 2 decimal places
$reduced_height = round(($height / 100) * $reduced_radio, 2);
//reduce the calculated height from the original height
$after_height = $height - $reduced_height;
//Now detect the file extension
//if the file extension is 'jpg', 'jpeg', 'JPG' or 'JPEG'
if ($extension == 'jpg' || $extension == 'jpeg' || $extension == 'JPG' || $extension == 'JPEG') {
//then return the image as a jpeg image for the next step
$img = imagecreatefromjpeg($source_url);
} elseif ($extension == 'png' || $extension == 'PNG') {
//then return the image as a png image for the next step
$img = imagecreatefrompng($source_url);
} else {
//show an error message if the file extension is not available
echo 'image extension is not supporting';
}
//HERE YOU GO :)
//Let's do the resize thing
//imagescale([returned image], [width of the resized image], [height of the resized image], [quality of the resized image]);
$imgResized = imagescale($img, $after_width, $after_height, $quality);
//now save the resized image with a suffix called "-resized" and with its extension.
imagejpeg($imgResized, $filename . '-resized.'.$extension);
//Finally frees any memory associated with image
//**NOTE THAT THIS WONT DELETE THE IMAGE
imagedestroy($img);
imagedestroy($imgResized);
}
?>
答え :
解決:
これは@IanAtkin 'が出した答えの拡張版です。私はそれが非常にうまくいったことを発見しました。大きい画像の場合:)。注意しないと、実際には小さい画像を大きくすることができます。変更点:-jpg、jpeg、png、gif、bmpファイルをサポートします-.pngおよび.gifの透明度を維持します-元のサイズがまだ小さくないかどうかを再確認します-直接指定された画像を上書きします(必要なものです)
だからここにあります。関数のデフォルト値は「黄金律」です
function resize_image($file, $w = 1200, $h = 741, $crop = false)
{
try {
$ext = pathinfo(storage_path() . $file, PATHINFO_EXTENSION);
list($width, $height) = getimagesize($file);
// if the image is smaller we dont resize
if ($w > $width && $h > $height) {
return true;
}
$r = $width / $height;
if ($crop) {
if ($width > $height) {
$width = ceil($width - ($width * abs($r - $w / $h)));
} else {
$height = ceil($height - ($height * abs($r - $w / $h)));
}
$newwidth = $w;
$newheight = $h;
} else {
if ($w / $h > $r) {
$newwidth = $h * $r;
$newheight = $h;
} else {
$newheight = $w / $r;
$newwidth = $w;
}
}
$dst = imagecreatetruecolor($newwidth, $newheight);
switch ($ext) {
case 'jpg':
case 'jpeg':
$src = imagecreatefromjpeg($file);
break;
case 'png':
$src = imagecreatefrompng($file);
imagecolortransparent($dst, imagecolorallocatealpha($dst, 0, 0, 0, 127));
imagealphablending($dst, false);
imagesavealpha($dst, true);
break;
case 'gif':
$src = imagecreatefromgif($file);
imagecolortransparent($dst, imagecolorallocatealpha($dst, 0, 0, 0, 127));
imagealphablending($dst, false);
imagesavealpha($dst, true);
break;
case 'bmp':
$src = imagecreatefrombmp($file);
break;
default:
throw new Exception('Unsupported image extension found: ' . $ext);
break;
}
$result = imagecopyresampled($dst, $src, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
switch ($ext) {
case 'bmp':
imagewbmp($dst, $file);
break;
case 'gif':
imagegif($dst, $file);
break;
case 'jpg':
case 'jpeg':
imagejpeg($dst, $file);
break;
case 'png':
imagepng($dst, $file);
break;
}
return true;
} catch (Exception $err) {
// LOG THE ERROR HERE
return false;
}
}
答え :
解決:
ZFケーキ:
<?php
class FkuController extends Zend_Controller_Action {
var $image;
var $image_type;
public function store_uploaded_image($html_element_name, $new_img_width, $new_img_height) {
$target_dir = APPLICATION_PATH . "/../public/1/";
$target_file = $target_dir . basename($_FILES[$html_element_name]["name"]);
//$image = new SimpleImage();
$this->load($_FILES[$html_element_name]['tmp_name']);
$this->resize($new_img_width, $new_img_height);
$this->save($target_file);
return $target_file;
//return name of saved file in case you want to store it in you database or show confirmation message to user
public function load($filename) {
$image_info = getimagesize($filename);
$this->image_type = $image_info[2];
if( $this->image_type == IMAGETYPE_JPEG ) {
$this->image = imagecreatefromjpeg($filename);
} elseif( $this->image_type == IMAGETYPE_GIF ) {
$this->image = imagecreatefromgif($filename);
} elseif( $this->image_type == IMAGETYPE_PNG ) {
$this->image = imagecreatefrompng($filename);
}
}
public function save($filename, $image_type=IMAGETYPE_JPEG, $compression=75, $permissions=null) {
if( $image_type == IMAGETYPE_JPEG ) {
imagejpeg($this->image,$filename,$compression);
} elseif( $image_type == IMAGETYPE_GIF ) {
imagegif($this->image,$filename);
} elseif( $image_type == IMAGETYPE_PNG ) {
imagepng($this->image,$filename);
}
if( $permissions != null) {
chmod($filename,$permissions);
}
}
public function output($image_type=IMAGETYPE_JPEG) {
if( $image_type == IMAGETYPE_JPEG ) {
imagejpeg($this->image);
} elseif( $image_type == IMAGETYPE_GIF ) {
imagegif($this->image);
} elseif( $image_type == IMAGETYPE_PNG ) {
imagepng($this->image);
}
}
public function getWidth() {
return imagesx($this->image);
}
public function getHeight() {
return imagesy($this->image);
}
public function resizeToHeight($height) {
$ratio = $height / $this->getHeight();
$width = $this->getWidth() * $ratio;
$this->resize($width,$height);
}
public function resizeToWidth($width) {
$ratio = $width / $this->getWidth();
$height = $this->getheight() * $ratio;
$this->resize($width,$height);
}
public function scale($scale) {
$width = $this->getWidth() * $scale/100;
$height = $this->getheight() * $scale/100;
$this->resize($width,$height);
}
public function resize($width,$height) {
$new_image = imagecreatetruecolor($width, $height);
imagecopyresampled($new_image, $this->image, 0, 0, 0, 0, $width, $height, $this->getWidth(), $this->getHeight());
$this->image = $new_image;
}
public function savepicAction() {
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
$this->_helper->layout()->disableLayout();
$this->_helper->viewRenderer->setNoRender();
$this->_response->setHeader('Access-Control-Allow-Origin', '*');
$this->db = Application_Model_Db::db_load();
$ouser = $_POST['ousername'];
$fdata = 'empty';
if (isset($_FILES['picture']) && $_FILES['picture']['size'] > 0) {
$file_size = $_FILES['picture']['size'];
$tmpName = $_FILES['picture']['tmp_name'];
//Determine filetype
switch ($_FILES['picture']['type']) {
case 'image/jpeg': $ext = "jpg"; break;
case 'image/png': $ext = "png"; break;
case 'image/jpg': $ext = "jpg"; break;
case 'image/bmp': $ext = "bmp"; break;
case 'image/gif': $ext = "gif"; break;
default: $ext = ''; break;
}
if($ext) {
//if($file_size<400000) {
$img = $this->store_uploaded_image('picture', 90,82);
//$fp = fopen($tmpName, 'r');
$fp = fopen($img, 'r');
$fdata = fread($fp, filesize($tmpName));
$fdata = base64_encode($fdata);
fclose($fp);
//}
}
}
if($fdata=='empty'){
}
else {
$this->db->update('users',
array(
'picture' => $fdata,
),
array('username=?' => $ouser ));
}
}
答え :
解決:
private function getTempImage($url, $tempName){
$tempPath = 'tempFilePath' . $tempName . '.png';
$source_image = imagecreatefrompng($url); // check type depending on your necessities.
$source_imagex = imagesx($source_image);
$source_imagey = imagesy($source_image);
$dest_imagex = 861; // My default value
$dest_imagey = 96; // My default value
$dest_image = imagecreatetruecolor($dest_imagex, $dest_imagey);
imagecopyresampled($dest_image, $source_image, 0, 0, 0, 0, $dest_imagex, $dest_imagey, $source_imagex, $source_imagey);
imagejpeg($dest_image, $tempPath, 100);
return $tempPath;
}
これは、この優れた説明に基づいた適応ソリューションです。この男は段階的な説明をしました。みんなが楽しんでくれることを願っています。
答え :
解決:
TinyPNGPHPライブラリを試してみることができます。このライブラリを使用すると、サイズ変更プロセス中に画像が自動的に最適化されます。ライブラリをインストールし、https://tinypng.com/developersからAPIキーを取得するために必要なすべて。ライブラリをインストールするには、以下のコマンドを実行します。
composer require tinify/tinify
その後、コードは次のようになります。
require_once("vendor/autoload.php");
\Tinify\setKey("YOUR_API_KEY");
$source = \Tinify\fromFile("large.jpg"); //image to be resize
$resized = $source->resize(array(
"method" => "fit",
"width" => 150,
"height" => 100
));
$resized->toFile("thumbnail.jpg"); //resized image
同じトピックについてブログを書いていますhttp://artisansweb.net/resize-image-php-using-tinypng
答え :
解決:
私は簡単な方法を提案します:
function resize($file, $width, $height) {
switch(pathinfo($file)['extension']) {
case "png": return imagepng(imagescale(imagecreatefrompng($file), $width, $height), $file);
case "gif": return imagegif(imagescale(imagecreatefromgif($file), $width, $height), $file);
default : return imagejpeg(imagescale(imagecreatefromjpeg($file), $width, $height), $file);
}
}
同様の質問
私たちのウェブサイトで同様の質問で答えを見つけてください。