Блог

Фрілансера

RSS
rss
Сцилочка дня
обслуживание ПК компьютерная помощь недорого
стоимость печати фотографий цифровых
Салон Инта, французкие бренды, свадебные платья смотрите на нашем сайте.
Закладки

Жов

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 смаком :)

Snowcore

после того как поработали с изображением, необходимо очистить память.
читаем в мане про imagedestroy :)

Artyom Shmatok

no spam <noindex> <nofolow>

Блог фрілансера
Sergunik
2009-2010