Intereting Posts
Facebook API. Как получить изображение профиля пользователя Facebook через API Facebook (не требуя от пользователя «Разрешить» приложение) Временная загрузка файла PHP не действительна Ресурс изображения Как сохранить php-массив на стороне клиента? почему функция php mail не работает в xampp Загрузите файл pdf, используя путь, сохраненный в базе данных? Неустранимая ошибка: класс «Дотенев \ Дотенев» не найден в Добавление <! ENTITY nbsp "& # 160;"> в DOCTYPE с использованием PHP dom PHP и Postgres: ловушки ошибок? Почему возможно иметь интерфейс без типа возврата в PHP? Facebook PHP SDK $ facebook-> getSignedRequest () Получить идентификатор пользователя и имя. (Вкладка страницы) Как я могу увидеть фактический XML, созданный PHP SOAP Client Class? Отправить wordpress $ current_user-> ID из php-файла в внешний файл Javascript почему php trim не действительно удаляет все пробелы и разрывы строк? system () отключено сообщение об ошибке Почта Swiftmailer входит в папку SPAM.

Обрезание изображения в браузере автоматически

Как я могу обрезать изображение автоматически через процесс загрузки? Есть ли функция php для этого?

Я хочу, чтобы моя веб-страница отображала изображения с тем же размером из разных размеров исходных изображений, обрезая его.

Или любая идея?

Скажите это как max_size.php

 <?php header('Content-type: image/jpeg'); function resampleimage($maxsize, $sourcefile, $imgcomp=0){ $g_imgcomp=100-$imgcomp; if(file_exists($sourcefile)){ $g_is=getimagesize($sourcefile); if($g_is[0] <= $maxsize && $g_is[1] <= $maxsize){ $new_width=$g_is[0]; $new_height=$g_is[1]; } else { $w_adjust = ($maxsize / $g_is[0]); $h_adjust = ($maxsize / $g_is[1]); if($w_adjust <= $h_adjust){ $new_width=($g_is[0]*$w_adjust); $new_height=($g_is[1]*$w_adjust); } else { $new_width=($g_is[0]*$h_adjust); $new_height=($g_is[1]*$h_adjust); } } $image_type = strtolower(strrchr($sourcefile, ".")); switch($image_type) { case '.jpg': $img_src = imagecreatefromjpeg($sourcefile); break; case '.jpeg': $img_src = imagecreatefromjpeg($sourcefile); break; case '.png': $img_src = imagecreatefrompng($sourcefile); break; case '.gif': $img_src = imagecreatefromgif($sourcefile); break; default: echo("Error Invalid Image Type"); die; break; } $img_dst=imagecreatetruecolor($new_width,$new_height); imagecopyresampled($img_dst, $img_src, 0, 0, 0, 0, $new_width, $new_height, $g_is[0], $g_is[1]); imagejpeg($img_dst); imagedestroy($img_dst); return true; } else { return false; } } resampleimage($_GET['maxsize'], $_GET['source']); ?> 

На странице, где у вас есть изображение

 <img id="img" src="max_size.php?maxsize=152&source=[some image path]" /> 

Автоматическое обрезка будет затруднительным, не зная, где находится объект. Возможно, вы можете попытаться получить внутренний центрированный прямоугольник, как на картинке:

Изображение на внутреннем прямоугольнике показывает прямоугольник внутри другого

Первое, что нужно сделать – найти исходные размеры изображения и тип файла . Вы не должны доверять расширению изображения и вместо этого использовать getimagesize для этого. Несмотря на то, что имя getimagesize не только возвращает размер, но и тип файла.

 //width is at index 0, height at index 1, mime type at ['mime'] key $original = getimagesize($filename); 

Затем вы должны создать внутреннюю структуру данных PHP для хранения исходного изображения в памяти, чтобы вы могли манипулировать им, используя imagecreatefromjpeg или imagecreatefrompng или imagecreatefromgif , в зависимости от типа изображения. Например:

 $srcImage = imagecreatefromjpeg($filename); 

Затем вы должны выделить другую структуру данных для хранения целевого изображения . В этом случае у нас нет изображения для начала, поэтому я выделяю пустое изображение.

 $dstImage = imagecreatetruecolor($newWidth, $newHeight); 

Затем вы должны скопировать часть исходного изображения на целевое изображение . Если вы не хотите изменять размер, используйте imagecopy , иначе, если вы хотите обрезать и изменить размер, вы можете рассмотреть imagecopyresampled .

 imagecopy(dstImage, $srcImage, 0, 0, $srcX, $srcY, $srcW, $srcH); 

Где $ srcX – начальная точка X исходного изображения, $ srcY – стартовая точка Y, $ srcW – ширина для копирования из начальной точки X, $ srcH – высота области, которую нужно скопировать.

Наконец, вы можете либо сохранить свое изображение с помощью:

 imagejpeg($this->dstImage, $filename, 90); 

или вы можете вывести его в браузер с помощью:

 imagejpeg($this->dstImage); 

Если вы сохраните изображение, которое вам нужно подумать, в каком каталоге его сохранить, если у вас много изображений (тысячи или более), подумайте о том, как разбить их на несколько подкаталогов.

Если вы сохраняете исходное изображение, никогда не сохраняйте изображения с расширениями, не входящими в список разрешенных расширений, или это будет огромная дыра в безопасности, в которой злоумышленник может отправить и выполнить любой код PHP на ваш сайт.

Основываясь на описанных концепциях, я написал небольшой класс:

 class ImageCrop { //Image resources private $srcImage, $dstImage; //original width and height private $width, $height; /** * Read an image from disk. * @return true in case of success, false otherwise. */ public function openImage($filename) { if (!file_exists($filename)) { return false; } $original = getimagesize($filename); switch ($original['mime']) { case 'image/jpeg': $this->srcImage = imagecreatefromjpeg($filename); break; case 'image/png': $this->srcImage = imagecreatefrompng($filename); break; case 'image/gif': $this->srcImage = imagecreatefromgif($filename); break; default: return false; } $this->width = $original[0]; $this->height = $original[1]; return true; } /** * Crop an image to the new specified dimension trying to get an * internal rectangle of the original image. No crop is done if the * original dimension is already smaller than $newWidth or $newHeight. */ public function crop($newWidth, $newHeight) { $this->dstImage = imagecreatetruecolor($newWidth, $newHeight); $srcX = $srcY; $srcW = $this->width; $srcH = $this->height; $extraWidth = $this->width - $newWidth; if ($extraWidth > 0) { $srcX = $extraWidth / 2; } $extraHeight = $this->height - $newHeight; if ($extraHeight > 0) { $srcY = $extraHeight / 2; } imagecopy($this->dstImage, $this->srcImage, 0, 0, $srcX, $srcY, $srcW, $srcH); } /** * Save the destination image, the crop function should have been * called already. */ public function save($filename) { imagejpeg($this->dstImage, $filename, 90); } /** * Output the destination image to the browser. */ public function output() { imagejpeg($this->dstImage); } } 

Сохраните класс в ImageCrop.php, использование образца:

 require_once 'ImageCrop.php'; $imageCrop = new ImageCrop(); if ($imageCrop->openImage('big.jpg')) { $imageCrop->crop(200, 300); //newWidth, newHeight $imageCrop->save('small.jpg'); } 

или, чтобы отправить вывод непосредственно в браузер, используйте $imageCrop->output(); ,