开发者

PHP GD Image Corruption On imagecopy()

I'm experiencing some weirdness with PHP 5.3.3, i'm trying to add a watermark to an image.

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

returns in: 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_heig开发者_运维知识库ht);

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

imagejpeg($image, null, 85);

returns in: http://i.stack.imgur.com/nwtqZ.jpg

buuuuuuuuut...... if i add the body (the cat) to the image...

$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);

results in: http://i.stack.imgur.com/Xeb73.jpg

As you can see in this last one, the bottom of the image is corrupt or something...... wtf happened?


Trying this code I see absolutely no error:

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

I'm gonna say it's got something to do with the actual images :-?

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜