Visualizzazione risultati 1 fino 19 di 19

Discussione: [PHP] Tagliare immagine

  1. #1
    Guest

    Predefinito [PHP] Tagliare immagine

    Ciao a tutti, vorrei creare uno script che parte da un'immagine qualsiasi di width ed height e me la tagli al centro (margin: 0 auto ) di dimensione 100x100px.
    Sapete indicarmi la strada per creare questo script? Funzioni particolari?
    Naturalmente, userò le GD2! Grazie mille, ciao Davide!

    PS. Per ora non ho niente di pronto...

  2. #2
    L'avatar di miki92
    miki92 non è connesso AlterGuru 2500
    Data registrazione
    21-04-2007
    Residenza
    Procida (NA)
    Messaggi
    4,233

    Predefinito

    Sfruttando imagecopyresampled() puoi copiare parte di un immagine, quindi dopo che hai ricavato le dimensioni dell'immagine da ridimensionare con imagesx() e imagesy() tagli la parte dell'immagine interessata.

    Ricapitolando con un esempio veloce:
    Codice PHP:
    $immagine = "immagine.jpg";

    // Ricavo le dimensioni
    $x = imagesx($immagine);
    $y = imagesy($immagine);

    // Ricavo il centro
    $nx = $x/2;
    $ny = $y/2;

    // Torno indietro di 100px per trovare il punto in cui iniziare il taglio
    $x = $nx-100;
    $y = $ny-100;

    // poi il resto segue
    Apprezzi l'aiuto? Offrimi un caffè!

  3. #3
    Guest

    Predefinito

    Niente da fare, non funziona! =(
    Codice PHP:
    <?php
    // immagine via get
    $immagine = $_GET["img"];
    $immagine = trim(addslashes($immagine));

    // ricavo l'estensione
    $est = substr(strrchr($immagine, '.'), 1);

    // creo l'header
    header("Content-type: image/$est");

    // ricavo le dimensioni
    $w = imagesx($immagine); # altezza
    $h = imagesy($immagine); # larghezza

    // ricavo il centro
    $nx = $w/2; # width
    $ny = $h/2; # height

    // torno indietro di 100px per trovatre il punto in cui iniziare il taglio
    $x = $nx-100; # width
    $y = $ny-100; # heigh

    // ricreo il tutto
    $img_p = imagecreatetruecolor($x, $y);
    $img = imagecreatefrompng($immagine);
    imagecopyresampled($img_p, $img, 0, 0, 0, 0, $x, $y, $w, $h);

    // mostro l'immagine
    imagepng($img_p,null,100);
    ?>
    L'immagine “http://localhost/ga/?img=http://i30....om/142v3mo.png” non può essere visualizzata poiché contiene degli errori.

  4. #4
    L'avatar di AlexKidd
    AlexKidd non è connesso Altervistiano Junior
    Data registrazione
    09-02-2007
    Messaggi
    516

    Predefinito

    Commenti temporaneamente l'header e vedi che errore ha generato (inquinando l'immagine)

  5. #5
    Guest

    Predefinito

    Ora mi da questi errori quando commento l'header...
    Warning: imagesx() expects parameter 1 to be resource, string given in index.php on line 13

    Warning: imagesy() expects parameter 1 to be resource, string given in index.php on line 14

    Warning: imagecreatetruecolor() [function.imagecreatetruecolor]: Invalid image dimensions in index.php on line 25

    Warning: imagecopyresampled() expects parameter 1 to be resource, boolean given in index.php on line 27

    Warning: imagepng() expects parameter 1 to be resource, boolean given in index.php on line 30

  6. #6
    L'avatar di AlexKidd
    AlexKidd non è connesso Altervistiano Junior
    Data registrazione
    09-02-2007
    Messaggi
    516

    Predefinito

    tutto ciò avviene perchè tu operi con un nome e non con una risorsa

    http://us.php.net/manual/en/function.imagesx.php ad esempio richiederebbe $img e non $immagine che è una stringa

    sposta la riga $img = imagecreatefrompng($immagine); prima di imagesx()

  7. #7
    Guest

    Predefinito

    Ok, fatto ora dice:
    ‰PNG ��� IHDR��+���h���&}A•
    Warning: imagepng() [function.imagepng]: gd-png: fatal libpng error: zlib failed to initialize compressor -- stream error inindex.php on line 33

    Warning: imagepng() [function.imagepng]: gd-png error: setjmp returns error condition in index.php on line 33
    Ma io le GD le ho abilitate su Wamp Server, ho fatto pure il phpinfo! XD
    Codice PHP:
    <?
    // immagine via get
    $immagine = $_GET["img"];
    #$immagine = trim(addslashes($immagine));

    // ricavo l'estensione
    $est = substr(strrchr($immagine, '.'), 1);

    // creo l'header
    #header("Content-type: image/$est");

    // creo l'immagine presa da $_GET
    $img = imagecreatefrompng($immagine);

    // ricavo le dimensioni
    $w = imagesx($img); # altezza
    $h = imagesy($img); # larghezza

    // ricavo il centro
    $nx = $w/2; # width
    $ny = $h/2; # height

    // torno indietro di 100px per trovatre il punto in cui iniziare il taglio
    $x = $nx-100; # width
    $y = $ny-100; # heigh

    // ricreo il tutto
    $img_p = imagecreatetruecolor($x, $y);

    imagecopyresampled($img_p, $img, 0, 0, 0, 0, $x, $y, $w, $h);

    // mostro l'immagine
    imagepng($img_p,null,100);
    ?>
    Grazie mille! ^^

  8. #8
    L'avatar di AlexKidd
    AlexKidd non è connesso Altervistiano Junior
    Data registrazione
    09-02-2007
    Messaggi
    516

    Predefinito

    prova con imagepng($img_p) senza indicare la qualità/compressione dell'immagine

    (ti manca zlib)

  9. #9
    Guest

    Predefinito

    Ora mi dice:
    Warning: imagecreatefrompng() [function.imagecreatefrompng]: Filename cannot be empty in index.php on line 13

    Warning: imagesx() expects parameter 1 to be resource, boolean given in index.php on line 16

    Warning: imagesy() expects parameter 1 to be resource, boolean given in index.php on line 17

    Warning: imagecreatetruecolor() [function.imagecreatetruecolor]: Invalid image dimensions in index.php on line 28

    Warning: imagecopyresampled() expects parameter 1 to be resource, boolean given in index.php on line 30

    Warning: imagepng() expects parameter 1 to be resource, boolean given in index.php on line 33
    ...ma come abilito le zlib su Wamp Server? Ho fatto una ricerca ma non ho capito da dove scaricare php_zlib.dll! XD Ciauu!!

  10. #10
    L'avatar di AlexKidd
    AlexKidd non è connesso Altervistiano Junior
    Data registrazione
    09-02-2007
    Messaggi
    516

    Predefinito

    $immagine è per caso una stringa vuota o, ancora peggio, non contiene nulla?

  11. #11
    Guest

    Predefinito

    Già, devi passare via get l'immagine! Ho provato lo script e funziona.

  12. #12
    Guest

    Predefinito

    Si, funziona ma non bene!
    1) Deve creare un taglio partendo dal centro
    2) Deve essere 100x100px
    Invece fa di testa sua ridimensionando!! XD
    Grazie mille.

  13. #13
    L'avatar di AlexKidd
    AlexKidd non è connesso Altervistiano Junior
    Data registrazione
    09-02-2007
    Messaggi
    516

    Predefinito

    prova con

    imagecopyresampled($img_p, $img, 0, 0, $x, $y, 100, 100, $nx, $ny);

    ma leggere la documentazione e provarci da solo ti fa cosi schifo?

  14. #14
    Guest

    Predefinito

    Ok funziona, ma non capisco perché viene applicato uno sfondo nero come background e quindi l'immagine non è 100x100 ma 299x104! XD
    Grazie mille.
    PS. Io le guide le leggo, solo che con GD2 non ci capisco niente!! **"

  15. #15
    L'avatar di AlexKidd
    AlexKidd non è connesso Altervistiano Junior
    Data registrazione
    09-02-2007
    Messaggi
    516

    Predefinito

    Non mi ero accorto che l'esempio era leggermente buttato li a caso

    prova a sostituire l'omonima istruzione con questa

    $img_p = imagecreatetruecolor(100, 100);

  16. #16
    Guest

    Predefinito

    Nonoh, non ci siamo. Prima ridimensiona l'immagine e dopo taglia.
    Io voglio che apra l'immagine, "selezioni un quadrato 100x100px", ricavi il centro, lo tagli e lo "stampi". Ciao e Grazie!!

  17. #17
    L'avatar di AlexKidd
    AlexKidd non è connesso Altervistiano Junior
    Data registrazione
    09-02-2007
    Messaggi
    516

    Predefinito

    dovresti incollarci l'attuale script (dopo tutte queste modifiche ho perso il filo del discorso) cosi da analizzarlo e sistemare quest'ultima feature

  18. #18
    Guest

    Predefinito

    Codice PHP:
    <?

    // immagine via get
    $immagine = $_GET["img"];
    #$immagine = trim(addslashes($immagine));

    // ricavo l'estensione
    $est = substr(strrchr($immagine, '.'), 1);

    // creo l'header
    header("Content-type: image/$est");

    // creo l'immagine presa da $_GET
    $img = imagecreatefrompng($immagine);

    // ricavo le dimensioni
    $w = imagesx($img); # altezza
    $h = imagesy($img); # larghezza

    // ricavo il centro
    $nx = $w/2; # width
    $ny = $h/2; # height

    // torno indietro per il taglio
    $x = $nx-100;
    $y = $ny-100;

    // ricreo il tutto
    $img_p = imagecreatetruecolor(100, 100);
    imagecopyresampled($img_p, $img, 0, 0, $x, $y, 100, 100, $nx, $ny);

    // mostro l'immagine
    imagepng($img_p);

    ?>
    Ciaoo!!

  19. #19
    L'avatar di AlexKidd
    AlexKidd non è connesso Altervistiano Junior
    Data registrazione
    09-02-2007
    Messaggi
    516

    Predefinito

    al posto di imagecopyresampled()

    imagecopy($img_p, $img, 0, 0, $x, $y, $nx, $ny);

Tags for this Thread

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •