Visualizzazione risultati 1 fino 8 di 8

Discussione: Merging di più immagini in 1

  1. #1
    rizzu non è connesso Neofita
    Data registrazione
    12-09-2017
    Messaggi
    5

    Exclamation Merging di più immagini in 1

    Salve a tutti, ho la necessità di creare un'immagine in php che sia la concatenazione di più immagini tra di loro. Ho scoperto che esiste la libreria GD ma proprio non riesco a utilizzarla. Ho provato a prendere le immagini dai loro URL e a usare il comando imagecreatefromjpeg($filename) ma niente, mi restituisce soltanto un "Resource id #6" e basta. Ho anche provato a fare il $im = file_get_contents($url) e poi a creare l'immagine da imagecreatefromstring($im) e niente anche in questo caso. Ovviamente non c'è stato verso di usare il comando imagecopymerge() che sarebbe quello di cui ho bisogno.

    Qualcuno conosce questa libreria e mi aiuta a capire?

    PS: le immagini hostate sono le mie, non sto prendendo immagini da altri e metterle insieme per spacciarle per mie. Ho solo la necessità di metterle insieme da php. Il risultato che vorrei ottenere è tipo questo:



    PPS: Il risultato ideale per me sarebbe riuscire a creare un video (o anche una GIF) usando come frame le immagini, questo perché appena devo mettere insieme già una decina di foto verrebbe fuori un'immagine lunghissima e poco visibile. Col video (o la GIF) risolverei il problema. Però guardando la libreria GD non mi sembra sia possibile, qualcuno ha qualche idea a tal proposito?
    Ultima modifica di rizzu : 24-03-2020 alle ore 15.36.57

  2. #2
    rizzu non è connesso Neofita
    Data registrazione
    12-09-2017
    Messaggi
    5

    Predefinito

    EDIT:

    Sono riuscito a far funzionare il codice, ho cancellato e riscritto tutto togliendo il file_get_contents che non serviva. Sono riuscito a creare un'immagine con sfondo trasparente di altezza tripla alle foto che devo concatenare e poi ho fatto il merge 1 ad 1 dell'immagine di sfondo con le foto. Tuttavia è questo il risultato che ottengo:



    Naturalmente non voglio che il colore predominante della prima foto vada a compromettere il resto. Voglio che le foto restino nei loro colori originali. Qualcuno ha idea di come sistemare questo problema?

  3. #3
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Il risultato ideale per me sarebbe riuscire a creare un video (o anche una GIF) usando come frame le immagini, questo perché appena devo mettere insieme già una decina di foto verrebbe fuori un'immagine lunghissima e poco visibile. Col video (o la GIF) risolverei il problema. Però guardando la libreria GD non mi sembra sia possibile, qualcuno ha qualche idea a tal proposito?
    Con GD non è possibile, e in generale questo non è il genere di attività per cui un server web è pensato. È molto più semplice usare strumenti come ffmpeg su un computer locale (puoi convertire una lista di immagini in un video con una riga di codice) e poi eventualmente caricare il prodotto finito sul server per renderlo disponibile. Senza contare che una GIF comporterebbe una drastica diminuzione della qualità.

    imagecreatefromjpeg($filename) ma niente, mi restituisce soltanto un "Resource id #6" e basta
    Esatto, con imagecreatefromjpeg crei un'immagine, la quale resta nella memoria dello script fintantoché questo è in esecuzione. Se vuoi creare anche un file che contiene quell'immagine dovrai chiamare anche funzioni come imagejpeg, imagepng, ecc.. È esemplificato anche nella documentazione di imagecopymerge.

    I suggerimenti che do più spesso:


  4. #4
    rizzu non è connesso Neofita
    Data registrazione
    12-09-2017
    Messaggi
    5

    Predefinito

    Citazione Originalmente inviato da mzanella Visualizza messaggio
    È molto più semplice usare strumenti come ffmpeg su un computer locale (puoi convertire una lista di immagini in un video con una riga di codice) e poi eventualmente caricare il prodotto finito sul server per renderlo disponibile.
    Innanzitutto ti ringrazio per avermi risposto. Purtroppo mi serve creare il video con le immagini dinamicamente. Ho fatto l'esempio con 3 immagini ma qui parliamo di 30 - 50 immagini da mettere in diversi ordini e non sempre tutte insieme. Non posso prevedere l'ordine e le immagini richieste, quindi non posso mettermi lì a creare un milione di video diversi per qualche frame diverso. Per questo avevo pensato alla concatenazione dinamica delle foto in un'unica immagine (che sono riuscito a fare perché ho corretto alcuni errori).

    Per quello che mi serve è la soluzione meno ideale per i motivi spiegati prima, però è già qualcosa. Adesso però non riesco a concatenare le immagini senza far sballare i colori originali delle foto. Hai una soluzione per questo?

  5. #5
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Mostra il codice che stai utilizzando. Normalmente le immagini sono copiate così come sono, senza modificarne il colore. Se riscontri una modifica del colore c'è qualcosa che non va nel codice.

    I suggerimenti che do più spesso:


  6. #6
    rizzu non è connesso Neofita
    Data registrazione
    12-09-2017
    Messaggi
    5

    Predefinito

    Citazione Originalmente inviato da mzanella Visualizza messaggio
    Mostra il codice che stai utilizzando. Normalmente le immagini sono copiate così come sono, senza modificarne il colore. Se riscontri una modifica del colore c'è qualcosa che non va nel codice.
    Certo, eccolo qui di seguito.
    Codice PHP:
    header ("Content-type: image/jpeg");

    //creo un'immagine di altezza tripla a quelle da unire, sarà la base di sfondo
    $fotocollage = imagecreate (1080, 5760);

    //alloco le tre immagini da mettere insieme allo sfondo
    $foto1 = imagecreatefromjpeg("foto1.jpg");
    $foto2 = imagecreatefromjpeg("foto2.jpg");
    $foto3 = imagecreatefromjpeg("foto3.jpg");

    //unisco le tre immagini allo sfondo
    imagecopymerge($fotocollage, $foto1, 0, 0, 0, 0, 1080, 1920, 100);
    imagecopymerge($fotocollage, $foto2, 0, 1920, 0, 0, 1080, 1920, 100);
    imagecopymerge($fotocollage, $foto3, 0, 3840, 0, 0, 1080, 1920, 100);

    //stampo a video il risultato e dealloco
    imagejpeg($fotocollage);
    imagedestroy($fotocollage);
    imagedestroy($foto1);
    imagedestroy($foto2);
    imagedestroy($foto3);
    Ultima modifica di alemoppo : 24-03-2020 alle ore 22.28.01 Motivo: +tag [php]

  7. #7
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Perdona il ritardo, come immaginavo nell'immagine costruita viene usata la palette dei colori della prima immagine per tutte e tre.
    La soluzione è rapida, bisogna cambiare questa riga:
    Codice PHP:
    $fotocollage = imagecreate (1080, 5760);
    in
    Codice PHP:
    $fotocollage = imagecreatetruecolor(1080, 5760);

    I suggerimenti che do più spesso:


  8. #8
    rizzu non è connesso Neofita
    Data registrazione
    12-09-2017
    Messaggi
    5

    Predefinito

    Citazione Originalmente inviato da mzanella Visualizza messaggio
    Perdona il ritardo, come immaginavo nell'immagine costruita viene usata la palette dei colori della prima immagine per tutte e tre.
    La soluzione è rapida, bisogna cambiare questa riga:
    Codice PHP:
    $fotocollage = imagecreate (1080, 5760);
    in
    Codice PHP:
    $fotocollage = imagecreatetruecolor(1080, 5760);
    Grazie mille, non avevo fatto caso a questa funzione. Adesso va alla grande. Ancora grazie per il supporto

Regole di scrittura

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