Visualizzazione dei risultati da 1 a 9 su 9

Discussione: rifilare immagini

  1. #1

    rifilare immagini

    posso rifilare il bianco in eccedenza ad una immagine con le GD LIBRARY?

  2. #2
    se sai già le dimensioni del bianco si... altrimenti nn so se esiste qualche funzione che individua il bianco e taglia..

  3. #3
    no ogni immagine è diversa e non ne conosco la dimensione del bianco, sono generate con exec('ps2png);

  4. #4
    Non so se c'è qualcosa di già pronto, se comunque il bordo bianco è "spesso" uguale su tutti e 4 i lati non è neanche troppo difficile creare una funzione ad hoc, un pò più complicato se ogni lato ha un eccedenza di bianco diversa.

    Giusto per indirizzarti su come affronterei io il problema (cerca prima se c'è già qualche libreria pronta)

    Intanto devi sapere le dimensioni dell'immagine
    Codice PHP:
    $arr getimagesize('immagine'); 
    Tramite le librerie GD puoi ,con poche righe di codice, sapere il codice esadecimale di un determinato pixel
    Codice PHP:
    $x 0// Pixel sull'asse X
    $y 0// Pixel sull'asse Y

    $image imagecreatefromgif("test.gif");
    $arr imagecolorat($image$x ,$y);

    extract(imagecolorsforindex($image$arr));

    $color sprintf('#%02X%02X%02X'$red$green$blue);

    // echo $color; restituirà #FFFFFF se c'è un bordo bianco 
    Ora tramite dei cicli non dovrebbe essere difficile trovare qual'è la prima "riga", partendo dall'alto, che non contiene solo bianco

    Esempio di utilizzo
    Codice PHP:
    <?php
    function getHEX($image$x$y)
    {
        
    $arr imagecolorat($image$x ,$y);
        
        
    extract(imagecolorsforindex($image$arr));
        
        return 
    sprintf('#%02X%02X%02X'$red$green$blue);
    }


    $image     imagecreatefromgif("test.gif");
    $arr    getimagesize("test.gif");

    $width    $arr[0];
    $height    $arr[1];

    for(
    $y 0$y $height$y++)
    {
        for(
    $x 0$x $width$x++)
        {
            if(
    getHEX($image$x$y) != "#FFFFFF"
                die(
    "Altezza bordo bianco: {$y} pixel");
        }
        
    }
    ?>
    questo va bene se come detto i lati bianchi hanno lo stesso spessore.

    dopo che sai quanto è il bordo bianco devi usare imagecopyresized() per tagliare l'immagine.

    Questo giusto per indirizzarti, poi vedi un pò te

  5. #5
    penso che sia un buon suggerimento applicabile ai 4 lati dell'immagine, modificando il ciclo a cui fai riferimento dall'alto verso il basso, poi dal basso verso l'alto, da sx verso dx e da dx verso sx.
    ci provo poi ti dirò
    grazie dell'illuminazione

  6. #6
    Figurati, hai già valutato anche soluzioni JS+PHP? (certo serve l'azione lato client)

    http://www.ajaxprogrammer.com/?p=9
    http://mondaybynoon.com/examples/image_crop_resize/

  7. #7
    Originariamente inviato da modografico
    penso che sia un buon suggerimento applicabile ai 4 lati dell'immagine, modificando il ciclo a cui fai riferimento dall'alto verso il basso, poi dal basso verso l'alto, da sx verso dx e da dx verso sx.
    ci provo poi ti dirò
    grazie dell'illuminazione
    Comunque non serve fare tutti questi cicli, a te basta sapere le cordinate dell'angolo in alto a sx e di quello in basso a dx per tagliare l'immagine.

    Quindi ti serve un altro ciclo soltanto

  8. #8
    grazie alla tua illuminazione ci sono riuscito, però ho messo i cicli per tutti i 4 lati in previsione di immagini non squadrate, è un po lentino ma funziona

    Codice PHP:
    <?php
    function getHEX($image$x$y)
    {
        
    $arr imagecolorat($image$x ,$y);
        
        
    extract(imagecolorsforindex($image$arr));
        
        return 
    sprintf('#%02X%02X%02X'$red$green$blue);
    }


    $image     imagecreatefrompng("ada.png");
    $arr    getimagesize("ada.png");

    $width    $arr[0];
    $height    $arr[1];

    //top
    for($y 0$y $height$y++)
    {
        for(
    $x 0$x $width$x++)
        {
            if(
    getHEX($image$x$y) != "#FFFFFF"){
                
    $top=$y;
                
    $x=$width;$y=$height;
            }
        }
    }
    //Bottom
    for($y $height-1$y 0$y--)
    {
        for(
    $x 0$x $width$x++)
        {
           if(
    getHEX($image$x$y) != "#FFFFFF"){
                
    $bottom=$y+1;
                
    $x=$width;$y=0;
            }
        }
    }
    //Left
    for($x 0$x $width$x++)
    {
        for(
    $y $top$y $bottom$y++)
        {
            if(
    getHEX($image$x$y) != "#FFFFFF"){
                
    $left=$x;
                
    $x=$width;$y=$height;
            }
        }
    }
    //Right
    for($x $width-1$x $left$x--)
    {
        for(
    $y $top$y $bottom$y++)
        {
            if(
    getHEX($image$x$y) != "#FFFFFF"){
                
    $right=$x+1;
                
    $x=0;$y=$height;
            }
        }
    }
    $newwidth $right-$left;
    $newheight $bottom-$top;

    // Content type
    header('Content-type: image/jpeg');

    // Load
    $thumb imagecreatetruecolor($newwidth$newheight);

    // Resize
    imagecopyresized ($thumb$image00$left $top  $newwidth$newheight$newwidth$newheight);

    // Output
    imagepng($thumb);
    ?>
    Grazie

  9. #9
    così è più veloce
    Codice PHP:
    <?php
    $image     
    imagecreatefrompng("ada.png");
    $arr    getimagesize("ada.png");

    $width    $arr[0];
    $height    $arr[1];

    //top
    for($y 0$y $height$y++)
    {
        for(
    $x 0$x $width$x++)
        {
        if(
    imagecolorat($image$x ,$y) != 16777215 ){
                
    $top=$y;
                
    $x=$width;$y=$height;
            }
        }
    }
    //Bottom
    for($y $height-1$y 0$y--)
    {
        for(
    $x 0$x $width$x++)
        {
        if(
    imagecolorat($image$x ,$y) != 16777215 ){
                
    $bottom=$y+1;
                
    $x=$width;$y=0;
            }
        }
    }
    //Left
    for($x 0$x $width$x++)
    {
        for(
    $y $top$y $bottom$y++)
        {
        if(
    imagecolorat($image$x ,$y) != 16777215 ){
                
    $left=$x;
                
    $x=$width;$y=$height;
            }
        }
    }
    //Right
    for($x $width-1$x $left$x--)
    {
        for(
    $y $top$y $bottom$y++)
        {
        if(
    imagecolorat($image$x ,$y) != 16777215 ){
                
    $right=$x+1;
                
    $x=0;$y=$height;
            }
        }
    }
    $newwidth $right-$left;
    $newheight $bottom-$top;

    // Content type
    header('Content-type: image/jpeg');

    // Load
    $thumb imagecreatetruecolor($newwidth$newheight);

    // Resize
    imagecopyresized ($thumb$image00$left $top  $newwidth$newheight$newwidth$newheight);

    // Output
    imagepng($thumb);
    ?>
    :quote:

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 © 2025 vBulletin Solutions, Inc. All rights reserved.