Это приложение написано мной, я протестировал его на своем локальном компьютере, и образ, сгенерированный моим приложением, великолепен без ошибок на моем локальном сервере разработки.Мое приложение - это API, пользователь использует его для создания мозаичного изображения.В основном она использует библиотеку PHP Image GD.
Проблема : сгенерированное изображение имеет правую и нижнюю черные границы шириной в один пиксель, но это происходит только на рабочем сервере Это не на моем локальном сервере.Граница создается только в том случае, если изображение прозрачное (в моем случае: изображение типа «контур», «инвертировать», «черное». Посмотрите на код ниже).Но иногда границы в основном присутствуют, а иногда нет.
Я уверен, что с моим кодом все в порядке, и мое приложение работает безупречно.Я протестировал в обеих средах один и тот же тип изображения, одно и то же измерение и одну и ту же конфигурацию для моего приложения ... и, тем не менее, рабочий сервер генерирует изображение с границей.
Вот фрагменткод моего приложения, на который с подозрением смотрится:
$src = $img->filePath;
$src_outline = $img->filePathComplements['outline'];
$src_invert = $img->filePathComplements['invert'];
$src_black = $img->filePathComplements['black'];
$info_text = is_array($img->info) ? join($img->info, ', ') : (is_string($img->info) ? $img->info : '');
$w = $img->widthOriginal;
$h = $img->heightOriginal;
$x = $img->fit->x + $this->packer->getPageMarginLeft() + $this->packer->getMarginLeft() +
$this->packer->getVerticalBorderWidth() + $this->packer->getVerticalBordefOffset();
$y = $img->fit->y + $this->packer->getPageMarginTop() + $this->packer->getMarginTop();
$info_y = $y + $h + $this->packer->getImageInfoMargin();
// Create main and complement images
$image_main = imagecreatefrompng($src);
$image_outline = imagecreatefrompng($src_outline);
$image_invert = imagecreatefrompng($src_invert);
$image_black = imagecreatefrompng($src_black);
list($w_px_original, $h_px_original) = getimagesize($src);
$image_main_resampled = Image::imageCreateTrueColorTransparent($w, $h);
$image_outline_resampled = Image::imageCreateTrueColorTransparent($w, $h);
$image_invert_resampled = Image::imageCreateTrueColorTransparent($w, $h);
$image_black_resampled = Image::imageCreateTrueColorTransparent($w, $h);
// Resample images from original dimension to DPI-based dimension
imagecopyresampled($image_main_resampled, $image_main, 0, 0, 0, 0, $w, $h, $w_px_original, $h_px_original);
imagecopyresampled($image_outline_resampled, $image_outline, 0, 0, 0, 0, $w, $h, $w_px_original, $h_px_original);
imagecopyresampled($image_invert_resampled, $image_invert, 0, 0, 0, 0, $w, $h, $w_px_original, $h_px_original);
imagecopyresampled($image_black_resampled, $image_black, 0, 0, 0, 0, $w, $h, $w_px_original, $h_px_original);
// Add image to all containers
// Parameters are: Destination image, source image, destination starting coordinates (x, y),
// source starting coordinates (x, y), source dimension (width, height).
imagecopy($container_main, $image_main_resampled, $x, $y, 0, 0, $w, $h);
imagecopy($container_outline, $image_outline_resampled, $x, $y, 0, 0, $w, $h);
imagecopy($container_invert, $image_invert_resampled, $x, $y, 0, 0, $w, $h);
imagecopy($container_black, $image_black_resampled, $x, $y, 0, 0, $w, $h);
// Add info to main and outline images
$info = Image::imageDrawTextBordered($w, $info_h, INFO_FONT_SIZE, INFO_BORDER_SIZE, $info_text);
imagecopy($container_main, $info, $x, $info_y, 0, 0, $w, $info_h);
imagecopy($container_outline, $info, $x, $info_y, 0, 0, $w, $info_h);
И Image::imageCreateTrueColorTransparent()
:
/**
* Creates and returns image resource of a true color transparent image.
* @param $width
* @param $height
* @return resource
*/
public static function imageCreateTrueColorTransparent($width, $height) {
$im = imagecreatetruecolor($width, $height);
imagealphablending($im, false);
imagesavealpha($im, true);
$transparent = imagecolorallocatealpha($im, 0, 0, 0, 127);
imagefill($im, 0, 0, $transparent);
return $im;
}
Пример результата с моей локальной машины (нажмите, чтобы посмотреть в оригинальном размере):
Пример результата с рабочего сервера (нажмите, чтобы посмотреть в оригинальном размере):
Я имеюЯ провел здесь исследование Stackoverflow, и я получил два потока, которые сказали, что проблема была вызвана функцией imagecopyresampled()
.Тем не менее, я не уверен в этом, так как мое приложение работает без ошибок на моей локальной машине.Вот список обсуждений:
Любая помощь будет признательна, пожалуйста, уточните, если вы знаете, что является причиной этого и / или вы когда-либо испытывали это.Заранее спасибо.