2017-01-20 28 views
1

Итак, у меня есть изображение размером 3 × 3 с использованием imagecreate. Я хочу увеличить изображение с помощью imagescale, сохраняя при этом вид сетки 3х3 «пикселей». Однако пиксели в правом и нижнем краях не имеют одинакового размера.Как использовать imagescale и сохранить внешний вид края «пикселей»

Вот мой код и вывод изображения:

<?php 

$image = imagecreate(3, 3); 
imagecolorallocate($image, 0, 0, 255); 
$red = imagecolorallocate($image, 255, 0, 0); 
imagesetpixel($image, 0, 0, $red); 
imagesetpixel($image, 1, 1, $red); 
imagesetpixel($image, 2, 2, $red); 

imagepng(imagescale($image, 200, 200, IMG_NEAREST_NEIGHBOUR)); 

header("Content-Type: image/png"); 

Это мой выход:

enter image description here

Обратите внимание, как нижний правый пиксель отрезан. Я продолжал играть с цифрами для новых измерений и достиг 256x256, в этот момент пиксели имеют одинаковый размер.

Это выход после использования 256x256:

enter image description here

Мой вопрос: Как я могу получить размеры, чтобы использовать для измененного изображения с эффектом я описал?

Вопрос с бонусом: Является альтернативным методом, который позволит мне изменить размер до произвольного размера и сохранить пиксели примерно одного размера?

ответ

1

Я бы использовал imagecopyresampled для достижения этого.

http://php.net/manual/en/function.imagecopyresampled.php

<?php 
    $width = 3; 
    $height = 3; 
    $image = imagecreate($width, $height); 
    imagecolorallocate($image, 0, 0, 255); 
    $red = imagecolorallocate($image, 255, 0, 0); 
    imagesetpixel($image, 0, 0, $red); 
    imagesetpixel($image, 1, 1, $red); 
    imagesetpixel($image, 2, 2, $red); 

    $new_width = 200; 
    $new_height = 200; 
    $dst = imagecreatetruecolor($new_width, $new_height); 
    imagecopyresampled($dst, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height); 
    imagepng($dst); 

    header("Content-Type: image/png");