Как использовать масштаб изображения и сохранить внешний вид краевых «пикселей»

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

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

<?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");

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

введите описание изображения здесь

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

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

введите описание изображения здесь

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

Дополнительный вопрос: это альтернативный метод, который позволит мне изменить размер до произвольного размера и сохранить пиксели примерно одинакового размера?

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");
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]