Изменение размера изображения в php после file_get_contents - PullRequest
3 голосов
/ 08 ноября 2011

Может кто-нибудь сказать мне, как я могу решить следующую проблему:

include('php/resizeImage.php');

if($_POST['uploadlink']){
    $url = $_POST['uploadlink'];
    $urlImage = file_get_contents($url);

    if ($_POST['filename']){
        $filename = $_POST['filename'].".jpg";
    } else {
        $urlinfo = parse_url($url);
        $filename = basename($urlinfo['path']);
    }

    $image = new ResizeImage();
    $image->load($filename);
    $image->resizeToWidth(300);
    $image->save($filename);

    file_put_contents("images/upload/".$filename, $urlImage);

  }

После того как я получил данные изображения из file_get_contents с URL-адреса, я хочу изменить его размер через мой скрипт resizeImage, который принимает имя файла изображения в качестве параметра.

Редактировать: функция загрузки ResizeImage и resizeToWidth:

function load($filename) {

      $image_info = getimagesize($filename);
      $this->image_type = $image_info[2];
      if( $this->image_type == IMAGETYPE_JPEG ) {

         $this->image = imagecreatefromjpeg($filename);
      } elseif( $this->image_type == IMAGETYPE_GIF ) {

         $this->image = imagecreatefromgif($filename);
      } elseif( $this->image_type == IMAGETYPE_PNG ) {

         $this->image = imagecreatefrompng($filename);
      }
   }

function resizeToWidth($width) {
      $ratio = $width / $this->getWidth();
      $height = $this->getheight() * $ratio;
      $this->resize($width,$height);
   }

У меня нет проблем, когда пользователь выбирает локальное изображение через тип ввода = 'file'.

    if (isset($_FILES["uploadedfile"])){
        $ufilename = $_FILES["uploadedfile"]["name"];
        $ufiletmpname = $_FILES["uploadedfile"]["tmp_name"];

        $image = new ResizeImage();
        $image->load($ufiletmpname);
        $image->resizeToWidth(300);
        $image->save($ufiletmpname);
}

Другая проблема: Я пересылаю имя пользователя в свой сценарий, потому что я хочу создать отдельную папку для каждого пользователя, чтобы они могли видеть только свои загруженные изображения.

$admin = $_GET['admin'];
file_put_contents("images/upload/".$admin."/".$filename, $urlImage);

Почему это не работает для меня?

Спасибо.

Ответы [ 3 ]

2 голосов
/ 08 ноября 2011

Легко.
Просто измените код любого вашего класса ResizeImage, чтобы он мог работать с двоичным содержимым изображения в дополнение к имени файла.

Ваш второй вопрос тоже довольно прост.
Настройте установку PHP, чтобы она отображала ошибки на экране (для сервера разработки, конечно же!), И вы увидите точный ответ на свой вопрос: «Почему это не работает для меня?».

error_reporting(E_ALL);
ini_set('display_errors',1);

обычно помогает.
(также убедитесь, что ваш код не выполняет никаких перенаправлений HTTP, которые могут скрыть от вас сообщения об ошибках)

1 голос
/ 08 ноября 2011

По первому вопросу ResizeImage - это ваш собственный класс или что-то, что вы скачали из сети. Чтобы помочь вам, нам нужно это увидеть.

Во второй части file_put_contents не будет создавать вам каталоги, для этого вам нужно использовать функцию mkdir.

1 голос
/ 08 ноября 2011

Что такое ResizeImage?

Если бы это был я, я бы сделал:

$data = file_get_contents($name);

$image = imagecreatefromstring($data);

// resize the image
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...