Pregunta

Utilizo este script para descargar y cambiar el tamaño de una imagen remota. En la parte del cambio de tamaño, algo sale mal. ¿Qué es?

<?php
$img[]='http://i.indiafm.com/stills/celebrities/sada/thumb1.jpg';
$img[]='http://i.indiafm.com/stills/celebrities/sada/thumb5.jpg';
foreach($img as $i){
    save_image($i);
    if(getimagesize(basename($i))){
        echo '<h3 style="color: green;">Image ' . basename($i) . ' Downloaded OK</h3>';
    }else{
        echo '<h3 style="color: red;">Image ' . basename($i) . ' Download Failed</h3>';
    }
}

function save_image($img,$fullpath='basename'){
    if($fullpath=='basename'){
        $fullpath = basename($img);
    }
    $ch = curl_init ($img);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_BINARYTRANSFER,1);
    $rawdata=curl_exec($ch);
    curl_close ($ch);




    // now you make an image out of it

    $im = imagecreatefromstring($rawdata);

    $x=300;
    $y=250;

    // then you create a second image, with the desired size
    // $x and $y are the desired dimensions
    $im2 = imagecreatetruecolor($x,$y);


    imagecopyresized($im2,$im,0,0,0,0,$x,$y,imagesx($im),imagesy($im));


    imagecopyresampled($im2,$im,0,0,0,0,$x,$y,imagesx($im),imagesy($im));

    // delete the original image to save resources
    imagedestroy($im);



    if(file_exists($fullpath)){
        unlink($fullpath);
    }
    $fp = fopen($fullpath,'x');
    fwrite($fp, $im2);
    fclose($fp);

    // remember to free resources
imagedestroy($im2);



}
?>
¿Fue útil?

Solución

Cuando lo ejecuto, PHP me da el siguiente error:

Advertencia: FWrite () espera que el Parámetro 2 sea cadena, recurso dado ... en la línea 53

fwrite() escribe una cadena en un archivo. Quieres usar la función GD imagejpeg() Para guardar el recurso GD en un archivo. Funciona para mi cuando cambio

$fp = fopen($fullpath,'x');
fwrite($fp, $im2);
fclose($fp);

a

imagejpeg($im2, $fullpath);

En una nota no relacionada, si todo lo que está haciendo con Curl es tomar los archivos, simplemente puede usar file_get_contents() En lugar de curl, suponiendo que PHP esté configurado para permitir URL completas en funciones Fopen. (Creo que es de forma predeterminada). Consulte la sección de notas en la página manual file_get_contents () para más información. La función es Safe binario, por lo que funciona con imágenes además de archivos de texto. Para usarlo, acabo de reemplazar las seis líneas de las funciones de curl con esta línea:

$rawdata = file_get_contents($img);

Actualizar:
En respuesta a su pregunta a continuación, puede especificar un nuevo nombre de archivo para ellos en las claves de matriz como así:

<?php
$img['img1.jpg']='http://i.indiafm.com/stills/celebrities/sada/thumb1.jpg';
$img['img2.jpg']='http://i.indiafm.com/stills/celebrities/sada/thumb5.jpg';
foreach($img as $newname => $i){
    save_image($i, $newname);
    if(getimagesize(basename($newname))){
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top