Może przyda ci się moja funkcja do skalowania obrazka(wystarczy delikatnie zmodyfikować)
public function imageResize($path, $width, $height)
{
$extension = $this-> getExtension($path);
//Sprawdź czy szerokośc i wysokosc jest procentowa(przekazane mniejsze od 0)
$width = ($width < 1) ? $oldWidth * $width : $width;
$height = ($height < 1) ? $oldHeight * $height : $height;
$newImage = imagecreatetruecolor($width, $height);
$tmpImage = $this -> imageHeaders[$extension]['f']($path);
imagecopyresampled($newImage, $tmpImage, 0, 0, 0, 0, $width, $height, $oldWidth, $oldHeight);
//Zapisz obrazek
$this -> imageHeaders[$extension]['fs']($newImage, $path);
}
A cała klasa odpowiedzialna za obrazki:
<?php
/**
*Autor: daniel1302(daniel.1302@gmail.com)
*Zakaz usuwania tego komentarza
*Licencja: BSD License
*/
class Files
{
/**
*Katalog na którym klasa pracuje
*/
private $dir;
/**
*Tablica z rozszerzeniami jakie klasa obsługuje
*/
private $extensions = array( 'jpg',
'jpeg',
'gif',
'png',
);
/**
*Katalogi znajdujące się w aktualnym
*/
/**
*Tablica z headerami do obrazków
*/
private $imageHeaders = array( 'h' => 'image/jpeg', //Kontent obrazka
'f' => 'imagecreatefromjpeg', //Funkcja otwierająca obrazek
'fs' => 'imagejpeg' //Funkcja zapisująca obrazek
),
'h' => 'image/jpeg',
'f' => 'imagecreatefromjpeg',
'fs' => 'imagejpeg'
),
'h' => 'image/gif',
'f' => 'imagecreatefromgif',
'fs' => 'imagegif'
),
'h' => 'image/png',
'f' => 'imagecreatefrompng',
'fs' => 'imagepng'
),
);
public function __construct
(array $extensions=null) {
$this -> extensions = $extensions;
}
/**
*Sprawdza czy można korzystać z takiego rozszezenia i zwraca wartość bool
*/
private function extensionIsAvailable($ext)
{
return true;
return false;
}
/**
*Zwróć liste folderów jakie znajdują się w aktualnym
*/
public function getDirs()
{
return $this -> dirs;
}
/**
*Usuwa wybrane przez nas pliki
*/
public function delete($file)
{
$deleted = 0;
foreach($file as $fileName)
{
$extension = $this -> getExtension($fileName);
if (true === $this -> extensionIsAvailable($extension) && file_exists($this -> dir.$fileName)) {
$deleted++;
}
}
else
{
$extension = $this -> getExtension($file);
if (true === $this -> extensionIsAvailable($extension) && file_exists($this -> dir.$file)) {
$deleted++;
}
}
return $deleted;
}
/**
*Skanuj katalog i zwróć tablicę z wszystkimi plikami
*/
public function scanDir($dir=null)
{
throw new FilesException('Nie podałeś katalogu który chcesz skanować!');
$this -> setDir($dir);
while(false !== ($fileName = readdir($handle))) {
$extension = explode('.', $fileName); $extension = end($extension);
if (true === $this -> extensionIsAvailable($extension))
{
$files[] = $fileName;
}
if(is_dir($this -> dir.$fileName) && $fileName != '.' && $fileName != '..') {
$this -> dirs[] = $fileName;
}
}
return $files;
}
/**
*Wysyła plik do odpowiedniego katalogu($this -> dir)
*
*Dodatkowe opcje:
*['max_size']- Maksymalny rozmiar pliku w kb
*['name']-Nowa nazwa, jeśli ma być zmieniona
*Jeśli plik jest obrazkiem
*['width']- Szerokośc jaka ma być nadana obrazkowi
*['height']- Szerokośc jaka ma być nadana obrazkowi
*
*Zwraca nazwe pliku, jeśli zostanie poprawnie wysłany
*/
public function upload
($file, array $options=null) {
throw new ImagesException('Nie podanko katalogu na którym mają być wykonywane działania');
$size = round($file['size']/1024
);
$extension = $this-> getExtension($file['name']);
if (false === $this -> extensionIsAvailable($extension))
throw new FilesException('Nie można uploadować pliku o takim rozszeżeniu!');
//Sprawdź czy zarządano zmiany nazwy
if (isset($options['name'])) $newName = $options['name'].'.'.$extension;
else
$newName = $file['name'];
$newPath = $this->dir.$newName;
//Sprawdź maksymalny rozmiar
if (isset($options['max_size']) && $size > $options['max_size']) throw new FilesException('Rozmiar uploadowanego pliku jest za wielki! Maksymalny rozmiar pliku jaki można wysłać to: '.$options['max_size'].' kb a ty próbowałeś wysłać plik o wadze '.$size.' kb');
throw new FilesException('Plik nie został przkeazany przez odpowiedni formularz!');
else
{
//Jeśli plik jest obrazkiem zmień mu rozmiary
if (isset($this -> imageHeaders[$extension])) {
if (isset($options['width'])) $width = $options['width'];
if (isset($options['height'])) $height = $options['height'];
//Jeśli który kolwiek rozmiar istnieje to wykoanaj zmianę rozmiarów
{
$this -> imageResize($newPath, $width, $height);
}
}
}
return $newName;
}
/**
*Zwróci rozrszezenie pliku
*/
public function getExtension($path)
{
}
/**
*Zmień rozmiar obrazka
*/
public function imageResize($path, $width, $height)
{
$extension = $this-> getExtension($path);
//Sprawdź czy szerokośc i wysokosc jest procentowa(przekazane mniejsze od 0)
$width = ($width < 1) ? $oldWidth * $width : $width;
$height = ($height < 1) ? $oldHeight * $height : $height;
$newImage = imagecreatetruecolor($width, $height);
$tmpImage = $this -> imageHeaders[$extension]['f']($path);
imagecopyresampled($newImage, $tmpImage, 0, 0, 0, 0, $width, $height, $oldWidth, $oldHeight);
//Zapisz obrazek
$this -> imageHeaders[$extension]['fs']($newImage, $path);
}
/**
*Ustaw katalog na jakim będziemy pracowali
*/
public function setDir($dir)
{
else
throw new FilesException('Katalog który próbujesz przeszukać jest nie poprawny lub nie istnieje!');
}
}
class FilesException extends Exception {}