• Publicidad

Uso del módulo GD (tratamiento de imágenes)

¿Ya sabes lo que es una referencia? Has progresado, el nível básico es cosa del pasado y ahora estás listo para el siguiente nivel.

Uso del módulo GD (tratamiento de imágenes)

Notapor jacano » 2007-10-30 07:21 @348

Me gustaría saber cómo puedo pasar una imagen cualquiera a monocromática usando GD ( ppm install http://theoryx5.uwinnipeg.ca/ppms/GD.ppd para active perl :D )

No lo consigo con esto, se supone que los únicos colores que tendrían que aparecer en la imagen una vez tratada serian el blanco y el negro, pero me aparece el negro y el gris; ¡¡¡donde tendría que ir blanco, aparece gris!!!, el negro sí funciona bien.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
use GD::Image;
use strict;


sub convertJPEGtoMonochromePNG{

                my $infile = shift;
                my $outfile = shift;
               
                my $image = GD::Image->new($infile);

                (my $width, my $height) = $image->getBounds();
               
                my $myImage = new GD::Image($width,$height);
               
                my $Black = $myImage->colorAllocate(0,0,0);
                my $White = $myImage->colorAllocate(255,255,255);

                for (my $y=0;$y<$height;$y++){
                                for (my $x=0;$x<$width;$x++){
                                                my $index = $image->getPixel($x,$y);
                                                (my $r, my $g, my $b) = $image->rgb($index);
                                                my $gs = (($r*0.299)+($g*0.587)+($b*0.114));
                                                if ( $gs > 150 ){
                                                                $image->setPixel($x,$y,$White);
                                                }
                                                else{
                                                                $image->setPixel($x,$y,$Black);
                                                }      
                                }
                }
               
                my $png_data = $image->png;
                open (PNG,">$outfile") || die "Error saving $outfile !!!";
                binmode PNG;
                print PNG $png_data;
                close PNG;


}


my $input = 'imgl.jpg';
my $output = 'byn.png';


&convertJPEGtoMonochromePNG($input,$output );

 
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4



Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
my $gs = (($r*0.299)+($g*0.587)+($b*0.114));
 if ( $gs > 150 )
......  #blanco aqui
else
.....  #negro aqui
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Con esto lo que consigo es discernir si tendría que poner blanco o negro en el pixel que analizo.

Bueno alguna ayudita, creo que el problema tiene que andar por aquí
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
my $White = $myImage->colorAllocate(255,255,255);
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Ahí creo el color blanco, puede que esté creando el gris en vez del blanco y por eso donde se supone que tiene que ir blanco va gris, pero no consigo nada.

¡¡¡Me sigue saliendo la imagen en negro y gris!!!

¡¡Una ayuda!!
jacano
Perlero nuevo
Perlero nuevo
 
Mensajes: 9
Registrado: 2007-04-17 15:39 @694

Publicidad

Notapor explorer » 2007-10-30 08:26 @393

También depende del programa que uses para ver las imágenes. Por ejemplo, no es lo mismo verlos en el Firefox que en el Explorer.

El que salga en gris me ha hecho recordar el canal alfa de los png. Quizás sea eso.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor kidd » 2007-10-30 09:59 @458

Hola,

Te recomiendo que intentes deshabilitar el alpha blending del dibujado que podría estar provocando el color gris de los píxeles en vez del blanco:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
$image->alphaBlending(0);
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Saludos
Uriel Lizama Perl programmer fundador de Perl en Español
Perl Programming Language
Avatar de Usuario
kidd
Creador de Perl en Español
Creador de Perl en Español
 
Mensajes: 1166
Registrado: 2003-10-15 16:52 @744
Ubicación: México

Notapor jacano » 2007-11-11 17:57 @789

Ya arreglé el problema:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
use GD::Image;
use strict;


sub convertJPEGtoMonochromePNG{

                my $infile = shift;
                my $outfile = shift;
               
                my $image = GD::Image->new($infile);

                (my $width, my $height) = $image->getBounds();
               
               
                my $Black = $image->colorAllocate(0,0,0);
                my $White = $image->colorAllocate(255,255,255);

                for (my $y=0;$y<$height;$y++){
                                for (my $x=0;$x<$width;$x++){
                                                my $index = $image->getPixel($x,$y);
                                                (my $r, my $g, my $b) = $image->rgb($index);
                                                my $gs = (($r*0.299)+($g*0.587)+($b*0.114));
                                                if ( $gs > 150 ){
                                                                $image->setPixel($x,$y,$White);
                                                }
                                                else{
                                                                $image->setPixel($x,$y,$Black);
                                                }    
                                }
                }
               
                my $png_data = $image->png;
                open (PNG,">$outfile") || die "Error saving $outfile !!!";
                binmode PNG;
                print PNG $png_data;
                close PNG;


}


my $input = 'imgl.jpg';
my $output = 'byn.png';


&convertJPEGtoMonochromePNG($input,$output );
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4



Era una tontería. Aún así ¡¡¡¡ muchas gracias !!!!
jacano
Perlero nuevo
Perlero nuevo
 
Mensajes: 9
Registrado: 2007-04-17 15:39 @694


Volver a Intermedio

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 3 invitados