[PERL] Конвертирование png -> jpg

Discussion in 'PHP' started by _Spamer_, 30 Jul 2012.

  1. _Spamer_

    _Spamer_ Elder - Старейшина

    Joined:
    3 Feb 2009
    Messages:
    83
    Likes Received:
    140
    Reputations:
    16
    Помогите ребят. Нужно сконвертировать вот такую капчу в jpg http://zalil.ru/33627679 .
    Знаю про библиотеку GD, любые обычные png конвертирует на ура, но не эту капчу, на выходе получаю черную картинку.
     
  2. Apeckou

    Apeckou Elder - Старейшина

    Joined:
    23 Jan 2007
    Messages:
    143
    Likes Received:
    11
    Reputations:
    0
    первую же ссылку в яндексе потестил

    PHP:
    <?php

    function image_change_alphaColor(& $image$_transparent_color)
    {
        
    set_time_limit(0);
        if(empty(
    $_transparent_color))
            
    $_transparent_color imagecolorallocatealpha$image 255255255);
        
    $_tc imagecolorsforindex($image$_transparent_color);
        
    imagealphablending($imagefalse);
        for(
    $x 0$x imagesx($image); $x++)
            for(
    $y 0$y imagesy($image); $y++){
                
    $color imagecolorat($image$x$y);
                if(
    $color != $_transparent_color){
                    
    $c imagecolorsforindex($image$color);
                    foreach(
    $c as $ci => $v)
                        $
    $ci = & $c[$ci];
                    if(!isset(
    $alpha));
                    elseif(
    $alpha == 127){
                        
    imagefill($image$x$y$_transparent_color);
                    }elseif(
    $alpha 0){
                        foreach(
    $c as $ci => $v)
                            $
    $ci round(
                                (
                                    
    $_tc[$ci] * $alpha + (
                                        (
    $ci == 'alpha')? 
                                            

                                            $
    $ci * (127 $alpha)
                                        )
                                ) / 
    127
                            
    );
                        
    $new_color imagecolorallocatealpha$image $red $green $blue$alpha );
                        
    imagefill($image$x$y$new_color);
                    }
                }
            }
        
    imagesavealpha($imagetrue);
    }

    $im=imagecreatefrompng("c.png");

    image_change_alphaColor($imimagecolorallocatealpha($im2552552550));
    imagesavealpha($imfalse);
    imagejpeg($im"WAZZUP.jpg");
    ?>


    <img src="WAZZUP.jpg">
    чувствую, 90% кода тут лишние, но работает
     
    #2 Apeckou, 31 Jul 2012
    Last edited: 31 Jul 2012
  3. _Spamer_

    _Spamer_ Elder - Старейшина

    Joined:
    3 Feb 2009
    Messages:
    83
    Likes Received:
    140
    Reputations:
    16
    Спасибо конечно, но ты бы посмотрел какой ЯП я указал.
     
  4. Mr.Snuffer

    Mr.Snuffer Member

    Joined:
    2 Jul 2010
    Messages:
    140
    Likes Received:
    13
    Reputations:
    0
    Проблема в том, что у той капчи прозрачный фон, а буквы черные.
    jpg прозрачного фона не порддерживает, соответственно нужно от него избавиться.

    Вообще у гд есть функция для этого, вроде, но можно ещё тупо на белую пику наложить.
     
  5. _Spamer_

    _Spamer_ Elder - Старейшина

    Joined:
    3 Feb 2009
    Messages:
    83
    Likes Received:
    140
    Reputations:
    16
    Решил с помощью наложения одного изображения на второе.
    Code:
    use Image::Magick;
    
    $background=Image::Magick->new;
    $logo = Image::Magick->new;
    $background->Read("png:white.png");
    $logo->Read("jpg:c.png");
    $background->Composite(image=>$logo,compose=>'over');
    $background->Set(quality=>100);
    $background->Write("jpg:new.jpg");
    
    
    
    
     
    #5 _Spamer_, 31 Jul 2012
    Last edited: 1 Aug 2012