Форум dkLab и Denwer
Здесь общаются Web-разработчики.
Генеральный спонсор:
Хостинг «Джино»

класс для закачки изображений с проверкой и созданием превьюшек (Corbie)
Author Message
Corbie
Заглянувший



Joined: 18 May 2005
Posts: 19
Карма: 0
   поощрить/наказать

Location: Kyiv

PostPosted: Mon Jul 25, 2005 8:25 am (написано за 1 минуту 59 секунд)
   Post subject: класс для закачки изображений с проверкой и созданием превьюшек
Reply with quote

вот почитал forum.dklab.ru/viewtopic.php?p=47412#47412
и вдруг нарисовалось вот это:
Code (php): скопировать код в буфер обмена
<?
/*
class Galery
{
  var $GaleryDir; //
  var $GaleryURL; //
  var $ThumbDir//
  var $ThumbURL//
  var $ThumbHeight;//
  var $Image; //
  var $UploadName;

  function CheckImgType() //
  {
    $imgtype = @getimagesize (www.php.net/getimagesize)($this->Image);
    $image_w = $imgtype[0];
    $image_h = $imgtype[1];
    switch($imgtype[2])
    {
      case 1:
      $image_type= "GIF";
      $image_ext = ".gif";
      $image_crt = imagecreatefromgif($this->Image);
      break;

      case 2:
      $image_type= "JPEG";
      $image_ext = ".jpg";
      $image_crt = imagecreatefromjpeg($this->Image);
      break;

      case 3:
      $image_type= "PNG";
      $image_ext = ".png";
      $image_crt = imagecreatefrompng($this->Image);
      break;

      case 6:
      $image_type= "BMP";
      $image_ext = ".bmp";
      $image_crt = imagecreatefromwbmp($this->Image);
      break;

      default:
      $image_err = "      GIF, JPEG, PNG  BMP";
    }
      if(!$image_err)
      {
      return array (www.php.net/array)("type"=>$image_type,"ext"=>$image_ext,"create"=>$image_crt,"width"=>$image_w,"height"=>$image_h);
      }
      else
      {
        return array (www.php.net/array)("error"=>$image_err);
      }
  }

  function CreateThumb() //
  {
    $check_img=$this->CheckImgType();
    if($check_img['type'])
    {
    $final_thumb_name = $this->ThumbDir.$this->UploadName.".jpg"; //
    $width = imagesx($check_img['create']);                                 //
    $height = imagesy($check_img['create']);                                //
    $thumb_width = ($this->ThumbHeight * $width) / $height;
    $thumb = imagecreatetruecolor($thumb_width, $this->ThumbHeight);
    imagecopyresampled($thumb,$check_img['create'],0,0,0,0,$thumb_width,$this->ThumbHeight,$width,$height);
    imageJPEG($thumb, $final_thumb_name);
    imagedestroy($check_img['create']);
    }
  }


  function UploadImg()
  {
    $this->CreateThumb();
    if(is_uploaded_file (www.php.net/is_uploaded_file)($this->Image))
    {
      $about_image=$this->CheckImgType();
      move_uploaded_file (www.php.net/move_uploaded_file)($this->Image,$this->GaleryDir.$this->UploadName.$about_image['ext']);
    }
  }
  function ViewImage()
  {

  }
}
?>
мне пригодилось у хостера дающего минимальные возможности (SAFE MODE etc.)
Back to top
View user's profile Send private message
Миша Спларов
Участник форума



Joined: 17 Nov 2003
Posts: 821
Карма: 65
   поощрить/наказать

Location: Россия, Москва

PostPosted: Mon Jul 25, 2005 9:44 am (спустя 1 час 19 минут; написано за 1 минуту 26 секунд)
   Post subject:
Reply with quote

Я пользуюсь следующей функцией для ресайза изображений:
Code (php): скопировать код в буфер обмена
<?php
// array imageResize (string $src, string $dest, integer $width, integer $height);
//
//
//
//
function imageResize ($src, $dest, $width, $height) {
  if (!file_exists (www.php.net/file_exists)($src)) return false;
  if (($size=getimagesize (www.php.net/getimagesize)($src))===false) return false;

  $format=strtolower (www.php.net/strtolower)(substr (www.php.net/substr)($size['mime'],strpos (www.php.net/strpos)($size['mime'],'/')+1));
  $icfunc='imagecreatefrom'.$format;
  if (!function_exists (www.php.net/function_exists)($icfunc)) return false;

  $x_ratio=$width/$size[0];
  $y_ratio=$height/$size[1];

  $ratio=min (www.php.net/min)($x_ratio, $y_ratio);
  $use_x_ratio=($x_ratio==$ratio);

  $new_width=$use_x_ratio?$width:floor (www.php.net/floor)($size[0]*$ratio);
  $new_height=!$use_x_ratio?$height:floor (www.php.net/floor)($size[1]*$ratio);
  $new_left=$use_x_ratio?0:floor (www.php.net/floor)(($width-$new_width)/2);
  $new_top=!$use_x_ratio?0:floor (www.php.net/floor)(($height-$new_height)/2);

  $isrc=$icfunc($src);
  $idest=imagecreatetruecolor($new_width, $new_height);

  imagecopyresampled($idest, $isrc, 0, 0, 0, 0, $new_width, $new_height, $size[0], $size[1]);
 
  if ($format=='jpeg') imagejpeg($idest, $dest);
  else imagepng($idest, $dest);

  imagedestroy($isrc);
  imagedestroy($idest);

  return array (www.php.net/array)($new_width, $new_height);
}

?>
Back to top
View user's profile Send private message
Юрий Насретдинов
Модератор



Joined: 13 Mar 2003
Posts: 8642
Карма: 198
   поощрить/наказать

Location: 007 495

PostPosted: Mon Jul 25, 2005 1:27 pm (спустя 3 часа 43 минуты; написано за 2 минуты 4 секунды)
   Post subject:
Reply with quote

Corbie
...а также нужно не забыть указать, что у хостера должна стоять GD2, причём с поддержкой GIF, PNG, JPEG и WBMP одновременно, НЕ должен стоять Русский Apache, а также превьюшки, получаемые в результате, будут иметь только одинаковую высоту, но никаких ограничений по ширине, что почти всегда неприемлимо.

Много условий, не так ли? Дорабатывайте библиотеку, чтобы хотя бы всё, что я написал выше, оказалось неправдой.
Back to top
View user's profile Send private message Send e-mail
Rumata
Профессионал



Joined: 17 Aug 2003
Posts: 1850
Карма: 185
   поощрить/наказать


PostPosted: Mon Jul 25, 2005 10:53 pm (спустя 9 часов 26 минут; написано за 5 минут 7 секунд)
   Post subject:
Reply with quote

первичность GD2 и поддержка соответствующих графических форматов, и вторичность пропорциональности ширины и высоты превью-образа к оригиналу - мне понятны

Юpий Насрeтдинов, растолкуй
обязательность отсутствия Руского Апача (РА) мне не понятна.
честно говоря я не встречался с русским апачем (всегда работал с их оригиналом) и мне действительно не понятна зависимость GD2 И РА

[off]
кстати, у меня лежит своя функция создания превью, если модераториат этого раздела не будет возражать могу запостить
[/off]
Back to top
View user's profile Send private message
Юрий Насретдинов
Модератор



Joined: 13 Mar 2003
Posts: 8642
Карма: 198
   поощрить/наказать

Location: 007 495

PostPosted: Mon Jul 25, 2005 11:03 pm (спустя 10 минут; написано за 1 минуту)
   Post subject:
Reply with quote

Rumata wrote:
обязательность отсутствия Руского Апача (РА) мне не понятна
Да есть такая проблема, как автоматическая перекодировка принимаемых данных. Так вот, чтобы закачка нормально работала, Русскому Апачу нужно такое поведение запретить. А делается это очень просто:
Code (Apache config): скопировать код в буфер обмена
<IfModule mod_charset.c>
CharsetRecodeMultipartForms off
</IfModule>
Сейчас намного менее актуально, т.к. русский апач почти нигде не ставят
Back to top
View user's profile Send private message Send e-mail
Rumata
Профессионал



Joined: 17 Aug 2003
Posts: 1850
Карма: 185
   поощрить/наказать


PostPosted: Mon Jul 25, 2005 11:05 pm (спустя 1 минуту 44 секунды; написано за 30 секунд)
   Post subject:
Reply with quote

Юpий Насрeтдинов, читал о таком, но к счастью не встречался с подобным
Back to top
View user's profile Send private message
Slayer
Guest





Карма: 388
   поощрить/наказать


PostPosted: Fri Feb 10, 2006 3:26 am (спустя 6 месяцев 15 дней 4 часа 21 минуту; написано за 22 секунды)
   Post subject:
Reply with quote

Peterhost.ru месяц назад ;) у них как раз НАДО указывать эту строчку...
Back to top
Юрий Насретдинов
Модератор



Joined: 13 Mar 2003
Posts: 8642
Карма: 198
   поощрить/наказать

Location: 007 495

PostPosted: Sat Feb 11, 2006 11:47 am (спустя 1 день 8 часов 20 минут; написано за 1 секунду)
   Post subject:
Reply with quote

Slayer
Угу
Back to top
View user's profile Send private message Send e-mail
Guest






Карма: 388
   поощрить/наказать


PostPosted: Mon Apr 09, 2007 12:14 pm (спустя 1 год 1 месяц 26 дней 27 минут; написано за 1 минуту 3 секунды)
   Post subject:
Reply with quote

Нужно записывать в переменную, но не выходит.
Quote:
include('func.php');

$file = "image.jpeg";

$img = send_thumbnail('$file','100','100','true');

echo "$img";
1) Если прописываю $file то вообще не отображаеться
2) Если прописываю просто:
Quote:
$img = send_thumbnail('$file','100','100','true');
Он выводит независимо от того напишу я echo $img или нет.
Back to top
Юрий Насретдинов
Модератор



Joined: 13 Mar 2003
Posts: 8642
Карма: 198
   поощрить/наказать

Location: 007 495

PostPosted: Mon Apr 09, 2007 8:44 pm (спустя 8 часов 29 минут; написано за 2 минуты 57 секунд)
   Post subject:
Reply with quote

Гость
Вы тему слегка перепутали ;)
Гость wrote:
$img = send_thumbnail('$file','100','100','true');
Неправильно всё в кавычки заключать, тем более одинарные. В PHP есть разделение типов, и 'true' - это не то же самое, что true (без апострофов)

Надо было для начала вот так:
Code (any language): скопировать код в буфер обмена
$img = send_thumbnail($file, 100, 100, true);
Это, конечно, всё равно не будет работать :). Потому что если бы Вы посмотрели внимательно пример того, как надо организовать кеширование, Вы бы знали, что надо писать так:
Code (any language): скопировать код в буфер обмена
ob_start();
send_thumbnail($file, 100, 100, true);
$img = ob_get_contents();
ob_end_clean();
header('content-type: text/html');
Back to top
View user's profile Send private message Send e-mail
arbyte
Участник форума



Joined: 09 Sep 2006
Posts: 40
Карма: 3
   поощрить/наказать

Location: Москва

PostPosted: Fri May 11, 2007 10:50 pm (спустя 1 месяц 2 дня 2 часа 5 минут; написано за 1 минуту 21 секунду)
   Post subject:
Reply with quote

Я использую след. класс для ресайза изображений. Когда-то он был сделан на основе ф-ции, которую написал Миша Спларов
Code (php): скопировать код в буфер обмена
<?php
/*
        class CImage{
                /*
                static (www.php.net/static) function imgResize($src, $dest = null, $width, $height, $typeOfResize = 3, $quality = 100, $resizeSmall = false, &$errorString = '', $needFormat = ''){
                       
                        if (!file_exists (www.php.net/file_exists)($src)){
                                $errorString = '  ';
                                return false;
                        }

                          $size = getimagesize (www.php.net/getimagesize)($src);

                          if ($size === false){
                                  $errorString = '  ';
                                  return false;
                          }

                          $format = strtolower (www.php.net/strtolower)(substr (www.php.net/substr)($size['mime'], strpos (www.php.net/strpos)($size['mime'], '/')+1));

                          $icfunc = "imagecreatefrom" . $format;
                          if (!function_exists (www.php.net/function_exists)($icfunc)){
                                  $errorString = '   ' . $icfunc;
                                  return false;
                          }
                       
                          //
                          switch ($typeOfResize){
                          case 0:
                                  $ratio = 1;
                                  break;
                 
                          case 1:
                                  $ratio = $width / $size[0];
                                  break;
                 
                          case 2:
                                    $ratio = $height / $size[1];
                                  break;
                 
                          case 3:
                                  $ratio = self::getScale($size[0], $size[1], $width, $height);
                                  break;
                          case 4:
                                  $ratio = 1;
                                  break;
                          }
                         
                          //
                          if ($ratio > 1 && !$resizeSmall){
                                  $ratio = 1;
                          }
 
                          if ($typeOfResize != 4){
                                  $new_width  = $size[0] * $ratio;
                                  $new_height  = $size[1] * $ratio;
                          } else {
                                  $new_width = $width;
                                  $new_height = $height;
                          }

                          $isrc = $icfunc($src);
                          $idest = imagecreatetruecolor($new_width, $new_height);
 
                        imagecopyresampled($idest, $isrc, 0,0, 0, 0, $new_width, $new_height, $size[0], $size[1]);

                        //
                        $needFormat = $needFormat ? $needFormat : $format;
                        $distFunc = 'image' . $needFormat;
                        if (!function_exists (www.php.net/function_exists)($distFunc)){
                                $errorString = ' ' . $distFunc . ' .';
                                return false;
                        }
                       
                        //
                        if (!$dest){
                                header (www.php.net/header)('Content-type: image/' . $needFormat);
                        }
                          $distFunc($idest, $dest, $quality);

                          imagedestroy($isrc);
                          imagedestroy($idest);


                          return true;
                }
               
                //
                static (www.php.net/static) function getScale($width, $height, $newWidth, $newHeight){
                        $xRatio = $newWidth / $width;
                        $yRatio = $newHeight / $height;
                        return min (www.php.net/min)($xRatio, $yRatio);
                }
               
}
?>
Back to top
View user's profile Send private message Send e-mail
Guest






Карма: 388
   поощрить/наказать


PostPosted: Sat Aug 18, 2007 5:39 pm (спустя 3 месяца 6 дней 18 часов 48 минут)
   Post subject:
Reply with quote

Вопрос решен, тему можно закрыть.
Back to top
princekain
Заглянувший



Joined: 09 Mar 2010
Posts: 2
Карма: 0
   поощрить/наказать


PostPosted: Tue Mar 09, 2010 5:09 pm (спустя 2 года 6 месяцев 21 день 23 часа 29 минут; написано за 3 минуты 57 секунд)
   Post subject:
Reply with quote

Люди подскажите пожалуйста.
Вы выложили готовые скрипты для создания превьюшек а как мне прикрепить это скрипт в форму отправки примерно вот в эту:
Это форма отправки
<form action="./upload.php" method="post" enctype="multipart/form-data">
<p><input type="file" name="userfile" id="file"></p>
<p><input type="submit" value="Загрузить фаил"></p>
</form>

А это обработчик
<?php

$allowed_filetypes = array('.jpg','.gif','.bmp','.png');
$max_filesize = 524288;
$upload_path = './files/';
$filename = $_FILES['userfile']['name'];
$ext = substr($filename, strpos($filename,'.'), strlen($filename)-1);

if(!in_array($ext,$allowed_filetypes))
die('Данный тип файла не поддерживается.');

if(filesize($_FILES['userfile']['tmp_name']) > $max_filesize)
die('Фаил слишком большой.');

if(!is_writable($upload_path))
die('Невозможно загрузить фаил в папку. Установите права доступа - 777.');

if(move_uploaded_file($_FILES['userfile']['tmp_name'],$upload_path . $filename))
{
echo 'Ваш фаил успешно загружен <a href="' . $upload_path . $filename . '">смотреть</a>';
}
else
{
echo 'При загрузке возникли ошибки. Попробуйте ещё раз.';
}
?>

Подскажите где и как я должен прописать чтоб при отправке у меня создавалась превьюшка?
В заранее спс.
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic All times are GMT + 3 Hours
Page 1 of 1    Email to a Friend.
You cannot post new topics in this forum. You cannot reply to topics in this forum. You cannot edit your posts in this forum. You cannot delete your posts in this forum. You cannot vote in polls in this forum. You cannot attach files in this forum. You can download files in this forum.
XML