Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it L'avatar di Marcolino's
    Registrato dal
    May 2003
    residenza
    Udine
    Messaggi
    3,606

    Ridimensionare un'immagine presa da database

    Riciao
    Ho una domanda semplice: io ho un'immagine immagazzinata in un database ( campo longblob ), una volta preso il dato da questo campo, prima di salvare l'immagine nel file system la voglio ridimensionare.
    Nel DB l'immagine pesa un megabyte ma per mostrarla su una pagina internet voglio ridimensionarla, anche in funzione dei dispositivi mobili ( mica tutti hanno una super connessione! ).
    Ora per fare ciò faccio sue passaggi, cioè prelevo l'immagine dal DB, la salvo sul file system e poi la ridimensiono, mi chiedevo se è possibile fare in modo da eliminare il passaggio del salvataggio.
    Mi chiedo in sostanza se posso con le GD manipolare l'immagine quando è ancora un dato all'interno di una variabile.
    Qualcuno sa se è possibile farlo e come?

  2. #2
    Utente di HTML.it L'avatar di clasku
    Registrato dal
    Aug 2006
    Messaggi
    3,197
    prova con imagecreatefromstring() (guarda nel manuale come usarla)
    per ridimensionarla credo tu possa usare lo stesso metodo che usi per le immagini che stanno sul filesystem

  3. #3
    Utente di HTML.it L'avatar di Marcolino's
    Registrato dal
    May 2003
    residenza
    Udine
    Messaggi
    3,606
    Sì infatti, ma come sempre se non la usi ti scordi che esiste, ora gli do un'occhiata ma penso sia la soluzione.Comunque grazie.

  4. #4
    Utente di HTML.it L'avatar di Marcolino's
    Registrato dal
    May 2003
    residenza
    Udine
    Messaggi
    3,606
    Quote Originariamente inviata da Marcolino's Visualizza il messaggio
    Sì infatti, ma come sempre se non la usi ti scordi che esiste, ora gli do un'occhiata ma penso sia la soluzione.Comunque grazie.
    Mi quoto
    No, quella funzione serve solo a sostituire la getimagesize() e non per definire l'oggetto image da passare a imagecopyresampled() per esempio.
    Ma sto pensando di provare una cosa letta proprio sulle pagine del manuale del PHP, cioè passarla come 'data://application/octet-stream;base64,' . base64_encode($string_data); dove string_data è la stringa da passare.

  5. #5
    Utente di HTML.it L'avatar di clasku
    Registrato dal
    Aug 2006
    Messaggi
    3,197
    non ho capito bene cosa intendi, però qui c'è un esempio di codice con resize di un'immagine create con imagecreatefromstring()

  6. #6
    Utente di HTML.it L'avatar di Marcolino's
    Registrato dal
    May 2003
    residenza
    Udine
    Messaggi
    3,606
    Quote Originariamente inviata da clasku Visualizza il messaggio
    non ho capito bene cosa intendi, però qui c'è un esempio di codice con resize di un'immagine create con imagecreatefromstring()
    Intendevo dire che mi sono rinco... ho confuso la funzione che hai citato tu con getimagesizefromstring

  7. #7
    Utente di HTML.it L'avatar di Marcolino's
    Registrato dal
    May 2003
    residenza
    Udine
    Messaggi
    3,606
    A chi interessa la funzione è questa:
    Codice PHP:
        define('THUMBNAIL_IMAGE_MAX_WIDTH'150);
        
    define('THUMBNAIL_IMAGE_MAX_HEIGHT'150);
        
    define('PC_IMAGE_MAX_WIDTH'700);
        
    define('PC_IMAGE_MAX_HEIGHT'550);
        
    define('UPLOADED_IMAGE_DESTINATION''./cache/img/');
        
    define('THUMBNAIL_IMAGE_DESTINATION''./cache/img/');

        function 
    generateImage($source_image$name_image) {
            list(
    $source_image_width$source_image_height$source_image_type) = getimagesizefromstring($source_image);
            
    $source_gd_image imagecreatefromstring($source_image);
            if (!
    $source_gd_image) {            return false;        }
            
    $source_aspect_ratio $source_image_width $source_image_height;
            
    $pc_aspect_ratio PC_IMAGE_MAX_WIDTH PC_IMAGE_MAX_HEIGHT;
            
    $thumbnail_aspect_ratio THUMBNAIL_IMAGE_MAX_WIDTH THUMBNAIL_IMAGE_MAX_HEIGHT;
             
    //    PC
             
    if ($source_image_width <= PC_IMAGE_MAX_WIDTH && $source_image_height <= PC_IMAGE_MAX_HEIGHT) {
                
    $pc_image_width $source_image_width;
                
    $pc_image_height $source_image_height;
            } elseif (
    $pc_aspect_ratio $source_aspect_ratio) {
                
    $pc_image_width = (int) (PC_IMAGE_MAX_HEIGHT $source_aspect_ratio);
                
    $pc_image_height PC_IMAGE_MAX_HEIGHT;
            } else {
                
    $pc_image_width PC_IMAGE_MAX_WIDTH;
                
    $pc_image_height = (int) (PC_IMAGE_MAX_WIDTH $source_aspect_ratio);
            }
            
    $pc_gd_image imagecreatetruecolor($pc_image_width$pc_image_height);
            
    imagecopyresampled($pc_gd_image$source_gd_image0000$pc_image_widthpc_image_height$source_image_width$source_image_height);
            
    $pc_image_path UPLOADED_IMAGE_DESTINATION 'pc_' $name_image;
            
    imagejpeg($pc_gd_image$pc_image_path90);

            
    //    Thumbnail
            
    if ($source_image_width <= THUMBNAIL_IMAGE_MAX_WIDTH && $source_image_height <= THUMBNAIL_IMAGE_MAX_HEIGHT) {
                
    $thumbnail_image_width $source_image_width;
                
    $thumbnail_image_height $source_image_height;
            } elseif (
    $thumbnail_aspect_ratio $source_aspect_ratio) {
                
    $thumbnail_image_width = (int) (THUMBNAIL_IMAGE_MAX_HEIGHT $source_aspect_ratio);
                
    $thumbnail_image_height THUMBNAIL_IMAGE_MAX_HEIGHT;
            } else {
                
    $thumbnail_image_width THUMBNAIL_IMAGE_MAX_WIDTH;
                
    $thumbnail_image_height = (int) (THUMBNAIL_IMAGE_MAX_WIDTH $source_aspect_ratio);
            }
            
    $thumbnail_gd_image imagecreatetruecolor($thumbnail_image_width$thumbnail_image_height);
            
    imagecopyresampled($thumbnail_gd_image$source_gd_image0000$thumbnail_image_width$thumbnail_image_height$source_image_width$source_image_height);
            
    $thumbnail_image_path THUMBNAIL_IMAGE_DESTINATION 'thumbs_' $name_image;
            
    imagejpeg($thumbnail_gd_image$thumbnail_image_path90);

           
    imagedestroy($source_gd_image);
            
    imagedestroy($pc_gd_image);
            
    imagedestroy($thumbnail_gd_image);
            return 
    true;
        } 
    Sembra complessa ma non lo è, la funzione si trova su internet, io l'ho solo modificata in parte, cioè per essere usata con una stringa invece che con un file, e ne ho raddoppiate le funzionalità perché ora a partire da una stringa crea due file, uno chiamato pc_eccetera.jpg e uno thumbs_eccetera.jpg
    La richiamate passando due parametri, uno è la stringa ottenuta dal database, l'altro il nome che volete assegnare all'immagine.
    Bene no?
    E invece no perché non funziona quella definita PC, cioè mi crea un'immagine nera mentre la thumbnails funziona perfettamente e mi ci sta scoppiando la testa.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.