如何使用imagescale并保留边缘“像素”的外观

时间:2017-01-20 00:47:17

标签: php gd image-scaling

所以我使用imagecreate获得了一个3x3像素的图像。我想用imagescale放大图像,同时保持3x3网格“像素”的外观。但是,右边缘和底边的像素大小不同。

这是我的代码和输出图像:

<?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 个答案:

答案 0 :(得分: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");