Жов
28
PHP, робота з картинками
категорія: php
Часто приходиться загружати на сервер (upload) різні картинки. І постійно приходиться писати одні і ті ж функції для роботи з картинками.
Тому я вирішив написати одну лібу (img.lib) на php, для загрузки картинок на сервер і їх обробки.
Отже набір функцій:
checkPic – перевіряємо картинку перед загрузкою. Максимальний розмір (size), розширення (extension), розрішення (resolution).
movePic – загружаємо картинку (робимо upload).
resizePic – змінюємо розміри картинки (resize).
Спочатку перевіряємо картинку:
function checkPic($aFile) {
global $gError, $gConf;
if ($aFile['error'] > 0) {
$gError .= "Error: File['error']={$aFile['error']}.\n";
return false;
}
//перевірка на макс. розмір
if ($aFile['size'] > $gConf['MaxSize']) {
$gError .= "Error: Занадто великий файл ({$aFile['size']}>{$gConf['MaxSize']}).\n";
return false;
}
//перевірка типу файла
switch ($aFile['type']) {
case 'image/gif':
$sExt = 'gif';
$img = imagecreatefromgif($aFile['tmp_name']);
break;
case 'image/jpeg':
$sExt = 'jpg';
$img = imagecreatefromjpeg($aFile['tmp_name']);
break;
case 'image/png':
$sExt = 'png';
$img = imagecreatefrompng($aFile['tmp_name']);
break;
default:
$gError .= "Error: Недопустиме розширення файла. Допускається загружати тільки формати gif, jpg, png.\n";
return false;
}
//перевірка розрішення картинки
//if (imagesx($img) != $gConf['picWidth'] || imagesy($img) != $gConf['picHeight']) {
if (imagesx($img) > $gConf['picWidth'] || imagesy($img) > $gConf['picHeight']) {
$gError .= "Error: Розрішення повинно бути {$gConf['picWidth']}x{$gConf['picHeight']}.\n";
return false;
}
$gError .= "Файл успішно перевірено.\n";
return array('tmp_name'=>$aFile['tmp_name'], 'ext'=>$sExt);
}
Потім заливаєм картинку до себе на сервер:
function movePic($tmp_name, $new_name, $ext) {
global $gError;
//$gen16 = preg_replace('/^0\.(\d{6,6})\d{2,2} (\d{10,10})$/', '$2$1', microtime());
$new_name = $new_name.'.'.$ext;
if (!move_uploaded_file($tmp_name, $new_name)) {
$gError .= "Error: файл не переміщено(перейменовано).\n";
return false;
} else {
$gError .= "Файл успішно переміщено(перейменовано).\n";
return true;
}
}
А також можемо змінити розміри картинки (маштабуємо):
function resizePic($name, $maxW=100, $maxH=100, $ext='jpg') {
global $gError;
//картинка на вхід
$inlink = $name.'.'.$ext;
//картинка на вихід
$outlink = $name.'_resized.'.$ext;
if(!file_exists($inlink)) {
$gError .= "Error: Немає такого файла.\n";
return false;
}
//нове тимчасове зображення
switch ($ext) {
case 'gif':
$img = imagecreatefromgif($inlink);
break;
case 'jpg':
$img = imagecreatefromjpeg($inlink);
break;
case 'png':
$img = imagecreatefrompng($inlink);
break;
default:
$gError .= "Error: Недопустиме розширення файла. Допускаються тільки формати gif, jpg, png.\n";
return false;
}
//поточна ширина і висота картинки
$curW = imagesx($img);
$curH = imagesy($img);
//підраховуємо нову ширину і висоту картинки
if($curW<=$maxW && $curH<=$maxH) {
$newW = $curW;
$newH = $curH;
}else {
$zoomW=$curW/$maxW;
$zoomH=$curH/$maxH;
//вибираємо по чому будем зумати
if($zoomW>$zoomH) {
$newW=$maxW;
$newH=$curH/$zoomW;
}else {
$newW=$curW/$zoomH;
$newH=$maxH;
}
}
//нова картинка
$dimg = imagecreatetruecolor($newW, $newH);
//копіюємо нове зображення
imagecopyresampled($dimg, $img, 0, 0, 0, 0, $newW, $newH, $curW, $curH);
//зберігаємо
imagejpeg($dimg, $outlink);
$gError .= "Картинку успішно заресайзили.\n";
return true;
}
На цьому все.
В архіві викладаю саму бібліотеку і формочку для аплоада картинок.
| Share | В Мой Мир |

Просто та зi смаком
№414 - 9 Лис 2009 о 16:43
Snowcore
после того как поработали с изображением, необходимо очистить память.
читаем в мане про imagedestroy
№466 - 13 Лип 2010 о 00:43
Artyom Shmatok