php PNG слишком пиксельный - PullRequest
0 голосов
/ 27 октября 2019

У меня есть этот код для генерации JPEG из PHP. Но мой конечный результат не такой, как я хотел. Мой jpeg сильно пикселизирован, и я не знаю почему, потому что я использовал: imagecopyresampled и imagejpeg.

<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">

<style>
.number{
    font-size: 60px;
    color: #8fec0b;
}
.text{
    font-size: 25px;

}
.stars {
    color: #8fec0b;
    font-size: 2em;
}

</style>

<?php
#$place_id = 'ChIJqSMdglkgoFMRvvPikAEYJ8w';
//=========exctract JSON=========
$url = "https://maps.googleapis.com/maps/api/place/details/json?place_id=ChIJqSMdglkgoFMRvvPikAEYJ8w&fields=name,rating,user_ratings_total&key=AIzaSyC16f4wVfi0lJgR1AbqVYkp80o7HAIpKC8";


     $jsonObj = json_decode($json, true);
     $name = $jsonObj['result']['name'];
     $rating = $jsonObj['result']['rating'];
     $total_reviews = $jsonObj['result']['user_ratings_total'];
?>

<span class ='number'><?php echo $rating?></span>
<?php
echo "<span class='stars'>";
for ( $i = 1; $i <= 5; $i++ ) {
    if ( round( $rating - .25 ) >= $i ) {
        echo "<i class='fa fa-star'></i>";
    } elseif ( round( $rating + .25 ) >= $i ) {
        echo "<i class='fa fa-star-half-o'></i>";
    } else {
        echo "<i class='fa fa-star-o'></i>";
    }
}
echo '</span>';?>
</br>
<span class ='text'><?php echo $total_reviews?> Total Reviews</span>


<!-- CREATE THE PNG IMAGE FROM JSON DATA-->
<?php
    $width = 136;
    $height = 137;
    $a = $total_reviews . ' Total Reviews';
    $b = $rating;

    #$fontsize_b = 5;
    #$fontsize_a = 5;
    $font_a   = "arialbd.ttf";
    $font_b   = "Arial.ttf";

    $size_a  = 37;
    $size_b  = 13;

    $img = imagecreate($width, $height);


    // Transparent background
    $black = imagecolorallocate($img, 0, 0, 0);
    imagecolortransparent($img, $black);

    // Color text
    $green = imagecolorallocate($img, 0, 128, 0);
    $black = imagecolorallocate($img, 0, 0, 0);

    imagettftext($img, $size_b, 0, 4, 100, $black, $font_b, $a);
    imagettftext($img, $size_a, 0, 36, 60, $green, $font_a, $b);
    imagefilter($img, IMG_FILTER_PIXELATE, 0, true);


    //header('Content-type: image/png');
    imagepng($img,'1.png');
    imagedestroy($img);

//=======create JPG with PNG======
$id = '1';
$cid = '1';
$vid = '5';
$bid = '7';

$png1 = imagecreatefrompng(''.$vid.'.png');
$png2 = imagecreatefrompng(''.$cid.'.png');
$png3 = imagecreatefrompng(''.$bid.'.png');
$jpeg = imagecreatefromjpeg(''.$id.'.jpg');


$width = '136';
$height = '137';
$newwidth = '136';
$newheight = '137';

list($width, $height) = getimagesize(''.$id.'.jpg');
list($newwidth, $newheight) = getimagesize(''.$cid.'.png');
$out = imagecreatetruecolor($newwidth, $newheight);

imagecopyresampled($out, $jpeg, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
imagecopyresampled($out, $png2, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);

$x_offset = 7;

for ( $i = 1; $i <= 5; $i++ ) {
    if($i <= round($rating)){
        //steluta plina
        imagecopyresampled($out, $png1, $x_offset, 63, 0, 0, 24, 24, 24, 24);
    }else{
        //steluta goala
        imagecopyresampled($out, $png3, $x_offset, 63, 0, 0, 24, 24, 24, 24);
    }

    $x_offset += 25;
}

imagejpeg($out, 'out-'.$cid.'-'.$id.'.jpg',100);
header('Location: out-'.$cid.'-'.$id.'.jpg');


exit;
?>

1. Хорошо. мой результат таков:

Это мой jpeg.

Как я могу сделать так, чтобы он больше не был таким пиксельным ?? Я пытаюсь все, но у меня нет результатов ...

Спасибо!

...