使用PHP创建具有动态值的图像

时间:2013-08-20 18:06:56

标签: php bitcoin

我想在PHP中创建一个小函数,它接受一个卷曲值并将其作为图像输出。我通过PHP图像处理和GD阅读,但我似乎在某个地方有一个逻辑错误,因为我得到的是一个空白图像,虽然我得到的价值没有问题。 有人看到我哪里出错了吗?

<?php
// Dynamic value on an image 
header("Content-type: image/png");

// Get value from API.
$c = curl_init();
curl_setopt($c, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($c, CURLOPT_HTTPHEADER, array('Accept: application/json',
'Content-Type:  application/json'));
curl_setopt($c, CURLOPT_URL, 'https://www.bitstamp.net/api/ticker/');

$data = curl_exec($c);
curl_close($c);

$obj = json_decode($data);

$price = round((40/($obj->{'last'})),3);
$image = imagecreatefrompng("price.png");
$color = ImageColorAllocate($image, 0, 0, 255);

// Calculate horizontal alignment for the value.
$BoundingBox1 = imagettfbbox(13, 0, 'ITCKRIST.TTF', $price);
$boyX = ceil((125 - $BoundingBox1[2]) / 2);

// Write value.
imagettftext($image, 13, 0, $boyX+25, 92, $color, 'ITCKRIST.TTF', $price);

// Return output.
ImageJPEG($image, NULL, 93);
ImageDestroy($image);
?>

1 个答案:

答案 0 :(得分:0)

您的内容类型和数据不匹配。

您暗示您的图片文件是PNG

header("Content-type: image/png");

但是你输出了一个JPEG

ImageJPEG($image, NULL, 93);

还有关于您的字体文件

  

根据PHP使用的GD库版本,当fontfile不以前导/开头时,然后.ttf将附加到文件名,库将尝试沿库定义的字体路径搜索该文件名

引用来自:http://php.net/manual/en/function.imagettftext.php

以下是在我的服务器上实际正常工作的工作代码

<?php

// Dynamic value on an image 
header("Content-type: image/jpeg");

error_reporting(E_ALL); 
ini_set('display_errors', TRUE);
// Create a stream
$opts = array(
  'http'=>array(
    'method'=>"GET",
    'header'=>"Accept-language: en\r\n" .
              "Cookie: foo=bar\r\n"
  )
);

$context = stream_context_create($opts);

$data = file_get_contents('https://www.bitstamp.net/api/ticker/', false, $context);
$obj = json_decode($data);

$price = round((40/($obj->{'last'})),3);
$image = imagecreatefrompng("price.png");
$color = ImageColorAllocate($image, 0, 0, 255);

// Calculate horizontal alignment for the value.
$BoundingBox1 = imagettfbbox(13, 0, './ITCKrist.TTF', $price);
$boyX = ceil((125 - $BoundingBox1[2]) / 2);

// Write value.
imagettftext($image, 13, 0, $boyX+25, 92, $color, './ITCKrist.TTF', $price);

// Return output.
ImageJPEG($image, NULL, 93);
ImageDestroy($image);
?>