[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Загрузка изображения с уменьшиными копиями
cyberside
Есть переменная с URL картинки, например:
$photo = "http://somesite.com/somedir/image.jpg";

Необходимо создать 3 варианта данной картинки и сохранить их в определенную папку (путь динамический)

Тоесть хочеться написать некую функцию которая будет удовлетворять такой пример:
$min_photo = SavePic($photo, 'Название сохраняемой картинки', 100 (размер по ширине), 165 (размер по высоте), 75 (качество), 'куда сохранять');
$big_photo = SavePic($photo, 'Название сохраняемой картинки', 200 (размер по ширине), 265 (размер по высоте), 75 (качество), 'куда сохранять');
$avatar_photo = SavePic($photo, 'Название сохраняемой картинки', 65 (размер по ширине), 65 (размер по высоте), 75 (качество), 'куда сохранять');


Может где есть пример c подобной проблемой?



Спустя 21 минута, 44 секунды (3.07.2012 - 23:01) Игорь_Vasinsky написал(а):
<?php
# ==================================================================================#
# Author: Jarrod Oberto
# Version: 1.0
# Date: 17-Jan-10
# Usage Example:
# include("classes/resize_class.php");
# $resizeObj = new resize('images/cars/large/input.jpg');
# $resizeObj -> resizeImage(150, 100, 0);
# $resizeObj -> saveImage('images/cars/large/output.jpg', 100);
# ==================================================================================#

/**
* /режимы: 1 - exact(по заданным height&width) 2 - portrait(fixed height) 3 - landscape(fixed width) 4 -auto(fixed heigth or width) 5 - crop
*/


Class resize{
// *** Class variables
private $image;
private $width;
private $height;
private $imageResized;

function __construct($fileName){
// *** Open up the file
$this->image = $this->openImage($fileName);

// *** Get width and height
$this->width = imagesx($this->image);
$this->height = imagesy($this->image);
}

private function openImage($file){
// *** Get extension
$extension = strtolower(strrchr($file, '.'));

switch($extension){
case '.jpg':
case '.jpeg':
$img = @imagecreatefromjpeg($file);
break;
case '.gif':
$img = @imagecreatefromgif($file);
break;
case '.png':
$img = @imagecreatefrompng($file);
break;
default:
$img = false;
break;
}
return $img;
}

public function resizeImage($newWidth, $newHeight, $option="auto"){
// *** Get optimal width and height - based on $option
$optionArray = $this->getDimensions($newWidth, $newHeight, $option);

$optimalWidth = $optionArray['optimalWidth'];
$optimalHeight = $optionArray['optimalHeight'];


// *** Resample - create image canvas of x, y size
$this->imageResized = imagecreatetruecolor($optimalWidth, $optimalHeight);
imagecopyresampled($this->imageResized, $this->image, 0, 0, 0, 0, $optimalWidth, $optimalHeight, $this->width, $this->height);


// *** if option is 'crop', then crop too
if($option == 'crop'){
$this->crop($optimalWidth, $optimalHeight, $newWidth, $newHeight);
}
}


private function getDimensions($newWidth, $newHeight, $option){
switch ($option){
case 'exact':
$optimalWidth = $newWidth;
$optimalHeight= $newHeight;
break;
case 'portrait':
$optimalWidth = $this->getSizeByFixedHeight($newHeight);
$optimalHeight= $newHeight;
break;
case 'landscape':
$optimalWidth = $newWidth;
$optimalHeight= $this->getSizeByFixedWidth($newWidth);
break;
case 'auto':
$optionArray = $this->getSizeByAuto($newWidth, $newHeight);
$optimalWidth = $optionArray['optimalWidth'];
$optimalHeight = $optionArray['optimalHeight'];
break;
case 'crop':
$optionArray = $this->getOptimalCrop($newWidth, $newHeight);
$optimalWidth = $optionArray['optimalWidth'];
$optimalHeight = $optionArray['optimalHeight'];
break;
}
return array('optimalWidth' => $optimalWidth, 'optimalHeight' => $optimalHeight);
}


private function getSizeByFixedHeight($newHeight){
$ratio = $this->width / $this->height;
$newWidth = $newHeight * $ratio;
return $newWidth;
}

private function getSizeByFixedWidth($newWidth){
$ratio = $this->height / $this->width;
$newHeight = $newWidth * $ratio;
return $newHeight;
}

private function getSizeByAuto($newWidth, $newHeight){
if($this->height < $this->width){ // *** Image to be resized is wider (landscape)
$optimalWidth = $newWidth;
$optimalHeight= $this->getSizeByFixedWidth($newWidth);
}
elseif($this->height > $this->width){ // *** Image to be resized is taller (portrait)
$optimalWidth = $this->getSizeByFixedHeight($newHeight);
$optimalHeight= $newHeight;
}else{ // *** Image to be resizerd is a square
if($newHeight < $newWidth) {
$optimalWidth = $newWidth;
$optimalHeight= $this->getSizeByFixedWidth($newWidth);
}else if ($newHeight > $newWidth){
$optimalWidth = $this->getSizeByFixedHeight($newHeight);
$optimalHeight= $newHeight;
}else{
// *** Sqaure being resized to a square
$optimalWidth = $newWidth;
$optimalHeight= $newHeight;
}
}

return array('optimalWidth' => $optimalWidth, 'optimalHeight' => $optimalHeight);
}

private function getOptimalCrop($newWidth, $newHeight){
$heightRatio = $this->height / $newHeight;
$widthRatio = $this->width / $newWidth;

if($heightRatio < $widthRatio){
$optimalRatio = $heightRatio;
}else{
$optimalRatio = $widthRatio;
}

$optimalHeight = $this->height / $optimalRatio;
$optimalWidth = $this->width / $optimalRatio;

return array('optimalWidth' => $optimalWidth, 'optimalHeight' => $optimalHeight);
}

private function crop($optimalWidth, $optimalHeight, $newWidth, $newHeight){
// *** Find center - this will be used for the crop
$cropStartX = ( $optimalWidth / 2) - ( $newWidth /2 );
$cropStartY = ( $optimalHeight/ 2) - ( $newHeight/2 );

$crop = $this->imageResized;
//imagedestroy($this->imageResized);

// *** Now crop from center to exact requested size

$this->imageResized = imagecreatetruecolor($newWidth , $newHeight);
imagecopyresampled($this->imageResized, $crop , 0, 0, $cropStartX, $cropStartY, $newWidth, $newHeight , $newWidth, $newHeight);
}


public function saveImage($savePath, $imageQuality="100"){
// *** Get extension
$extension = strrchr($savePath, '.');
$extension = strtolower($extension);

switch($extension){
case '.jpg':
case '.jpeg':
if(imagetypes() & IMG_JPG){
imagejpeg($this->imageResized, $savePath, $imageQuality);
}
break;

case '.gif':
if(imagetypes() & IMG_GIF){
imagegif($this->imageResized, $savePath);
}
break;

case '.png':
// *** Scale quality from 0-100 to 0-9
$scaleQuality = round(($imageQuality/100) * 9);

// *** Invert quality setting as 0 is best, not 9
$invertScaleQuality = 9 - $scaleQuality;

if(imagetypes() & IMG_PNG){
imagepng($this->imageResized, $savePath, $invertScaleQuality);
}
break;

// ... etc

default:
// *** No extension - No save.
break;
}

imagedestroy($this->imageResized);
}
}

?>

Спустя 18 минут, 6 секунд (3.07.2012 - 23:19) Nikitian написал(а):
Как вариант, залить на яндекс.фотки - там они сами отресайзятся к фиксированным размерам по ширине и будут в "определённой папке" smile.gif
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.