У меня есть этот код для генерации 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.
Как я могу сделать так, чтобы он больше не был таким пиксельным ?? Я пытаюсь все, но у меня нет результатов ...
Спасибо!