Cambiar el tamaño de la imagen en php después de file_get_contents

¿Alguien puede decirme cómo puedo resolver el siguiente problema?

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);

  }

Después de recibir los datos de la imagen de file_get_contents de una URL, quiero cambiar su tamaño a través de mi script resizeImage que toma el nombre de archivo de la imagen como parámetro.

Editar: carga de la función ResizeImage y 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);
   }

No tengo problemas para hacerlo cuando el usuario selecciona una imagen local a través de input type = '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);
}

Otro problema: reenvío el nombre del usuario a mi script porque quiero crear una carpeta individual para cada usuario, de modo que solo puedan ver sus propias imágenes cargadas.

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

¿Por qué esto no me funciona?

Gracias.

preguntado el 08 de noviembre de 11 a las 13:11

3 Respuestas

Fácil.
Solo altera el código de lo que sea la suya ResizeImage para que pueda operar el contenido binario de la imagen además del nombre del archivo.

Tu segunda pregunta también es bastante simple.
Configure su instalación de PHP para que muestre errores en la pantalla (¡para el servidor de desarrollo, por supuesto!) Y verá la respuesta exacta a su pregunta, "¿Por qué esto no me funciona?".

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

generalmente ayuda.
(también asegúrese de que su código no realice redirecciones HTTP que puedan ocultarle los mensajes de error)

respondido 08 nov., 11:18

Gracias. No he escrito la clase resizeImage por mí mismo, pero lo intentaré. - Casper Slynge

¿Qué es ResizeImage?

Si fuera yo, haría:

$data = file_get_contents($name);

$image = imagecreatefromstring($data);

// resize the image

respondido 08 nov., 11:18

Probaré eso. Gracias. ResizeImage es "mi propia" clase. He insertado la función load y resizeToWidth en el mensaje original - Casper Slynge

No funciona. Puedo cambiar el tamaño de la imagen después de haber creado imagecreatefromstring pero luego no puedo usar file_put_contents con $ image como parámetro. - Casper Slynge

No tienes que usar file_put_contents(). Utilizar imagepng($image, $filename); en lugar de. También debe leer los documentos PHP en esta extensión ... - cristiano

Para su primera pregunta, ResizeImage es su propia clase, o algo que descargó de la red. Para ayudarte, necesitamos verlo.

Para la segunda parte, file_put_contents no le creará directorios, para hacer eso, necesita usar la función mkdir.

respondido 08 nov., 11:18

De acuerdo, pero ya intenté crear previamente una carpeta en el servidor con el mismo nombre exacto que $ admin, y eso tampoco funcionó. Casper Slynge

Probé el mkdir. Ni siquiera crea la carpeta. ¿Puede haber algunas restricciones en el FTP? - Casper Slynge

entonces probablemente sea un problema de permisos: el usuario de su script php (servidor web) no puede escribir el directorio de destino. No tiene nada que ver con el protocolo / servidor ftp. Debe cambiar los permisos de la carpeta. - Dutow

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.