Повреждение изображения в PHP GD на imagecopy () - PullRequest
0 голосов
/ 02 апреля 2011

Я испытываю некоторые странности с PHP 5.3.3, я пытаюсь добавить водяной знак к изображению.

$body = @imagecreatefromstring($image_data['body']);
imagejpeg($body, null, 85);

возвращает: http://i.stack.imgur.com/KJjDi.jpg

$body   = @imagecreatefromstring($image_data['body']);
$logo   = @imagecreatefrompng(APP_ROOT . self::WATERMARK_PATH);

$body_width     = (int) @imagesx($body);
$body_height    = (int) @imagesy($body);

$logo_width     = (int) @imagesx($logo);
$logo_height    = (int) @imagesy($logo);

$image = imagecreatetruecolor($body_width + 4, $body_height + $logo_height);

imagecopy(
    $image, $logo, 
    intval($body_width / 2) - ceil($logo_width / 2), $body_height, 
    0, 0, $logo_width, $logo_height
);

imagejpeg($image, null, 85);

возвращает: http://i.stack.imgur.com/nwtqZ.jpg

buuuuuuuuut ...... если я добавлю тело (кошку) к изображению ...

$body   = @imagecreatefromstring($image_data['body']);
$logo   = @imagecreatefrompng(APP_ROOT . self::WATERMARK_PATH);

$body_width     = (int) @imagesx($body);
$body_height    = (int) @imagesy($body);

$logo_width     = (int) @imagesx($logo);
$logo_height    = (int) @imagesy($logo);

$image = imagecreatetruecolor($body_width + 4, $body_height + $logo_height);

imagecopy(
    $image, $body, 
    1, 1, 
    0, 0, $body_width, $body_height
);

imagecopy(
    $image, $logo, 
    intval($body_width / 2) - ceil($logo_width / 2), $body_height, 
    0, 0, $logo_width, $logo_height
);

imagejpeg($image, null, 85);

приведет к 1015 *

Как вы можете видеть в этом последнем, нижняя часть изображения повреждена или что-то ...... что случилось?

1 Ответ

0 голосов
/ 02 апреля 2011

Попробовав этот код, я не вижу абсолютно никакой ошибки:

<?php
$body   = imagecreatefromjpeg('http://i.stack.imgur.com/KJjDi.jpg');
$logo   = imagecreatefromjpeg('http://b.vimeocdn.com/ps/161/161028_300.jpg');
$body_width     = (int) imagesx($body);
$body_height    = (int) imagesy($body);
$logo_width     = (int) imagesx($logo);
$logo_height    = (int) imagesy($logo);
$image = imagecreatetruecolor($body_width + 4, $body_height + $logo_height);
imagecopy(
    $image, $body, 
    1, 1, 
    0, 0, $body_width, $body_height
);
imagecopy(
    $image, $logo, 
    intval($body_width / 2) - ceil($logo_width / 2), $body_height, 
    0, 0, $logo_width, $logo_height
);
header('Content-Type: image/jpeg');
imagejpeg($image, null, 85);
?>

Я хочу сказать, что это как-то связано с реальными изображениями: -?

...