PHP:上传时将文本嵌入到图像中

时间:2016-02-15 08:58:43

标签: php image

我跟着this example在上传时将图片嵌入到图片中,但它无效。

这是我的代码:

header('Content-type: image/jpeg');
$img = $_FILES['mainImage']['name'];
list($txt, $ext) = explode(".", $img);
$imgName = "ac_".time().".".$ext;
$tmp = $_FILES['mainImage']['tmp_name'];

$textToImage = imagecreatefromjpeg($tmp);
// Allocate A Color For The Text
$white = imagecolorallocate($textToImage, 255, 255, 255);
// Set Path to Font File
$font_path = '../assets/fonts/font.ttf';
// Set Text to Be Printed On Image
$text = "Test text";
// Print Text On Image
imagettftext($textToImage, 25, 0, 75, 300, $white, $font_path, $text);

$imageUploaded = move_uploaded_file($tmp, 'images_path/'.$imgName);
if(!$imageUploaded){
    die('Error upload image!');
}

图片已上传,但内容中没有文字!

2 个答案:

答案 0 :(得分:1)

为此,我们正在使用GD library

  

" PHP不仅限于创建HTML输出。它也可以使用   在各种不同的图像中创建和操作图像文件   格式,包括GIF,PNG,JPEG,WBMP和XPM。更   方便的是,PHP可以直接将图像流输出到浏览器。您   将需要使用GD library图像函数编译PHP   这个工作。 GD和PHP也可能需要其他库,具体取决于   您希望使用哪种图像格式。"

您可以使用PHP中的图像功能来获取JPEG,GIF,PNG,SWF,TIFF和JPEG2000图像的大小。

以下代码示例演示了如何使用GD库动态水印图像。此处演示的为上传图像添加水印的方法是将原始图像与另一个图像叠加,最好是透明的PNG图像。

PHP提供了丰富的功能集,可以动态创建和更改图像。这些函数需要GD库,它自4.3版本以来与PHP捆绑在一起。

HTML表单需要文件上传元素:<input type="file">.您还必须为表单指定正确的编码类型:enctype="multipart/form-data"

 / link to the font file no the server
$fontname = 'font/Capriola-Regular.ttf';
// controls the spacing between text
$i=30;
//JPG image quality 0-100
$quality = 85;

function create_image($user){

global $fontname;
global $quality;
$file = "covers/".md5($user[0]['name'].$user[1]['name'].$user[2]['name']).".jpg";

// if the file already exists dont create it again just serve up the original
if (!file_exists($file)) {

// define the base image that we lay our text on
$im = imagecreatefromjpeg("pass.jpg");

// setup the text colours
$color['grey'] = imagecolorallocate($im, 54, 56, 60);
$color['green'] = imagecolorallocate($im, 55, 189, 102);

// this defines the starting height for the text block
$y = imagesy($im) - $height - 365;

// loop through the array and write the text
foreach ($user as $value){
// center the text in our image - returns the x value
$x = center_text($value['name'], $value['font-size']);
imagettftext($im, $value['font-size'], 0, $x, $y+$i, $color[$value['color']], $fontname,$value['name']);
// add 32px to the line height for the next text block
$i = $i+32;

}
// create the image
imagejpeg($im, $file, $quality);

}

return $file;
}

function center_text($string, $font_size){
global $fontname;
$image_width = 800;
$dimensions = imagettfbbox($font_size, 0, $fontname, $string);
return ceil(($image_width - $dimensions[4]) / 2);
}

$user = array(

array(
'name'=> 'Slimen Tunis',
'font-size'=>'25',
'color'=>'black'),

array(
'name'=> 'Web developer',
'font-size'=>'16',
'color'=>'grey'),

array(
'name'=> 'SlimenTunis@webdeveloper.com',
'font-size'=>'13',
'color'=>'green'
)
);

// run the script to create the image
$filename = create_image($user); 

这里我们有两个功能,使它尽可能简单。要运行代码,只需将$ user数组数据传递给函数,它就会将新映像保存在服务器上的“cover”文件夹中。该函数返回文件url,因此您只需将其回显到图像标记中,如下所示。查看演示,您可以在其中创建自己的演示文稿。

$filename = create_image($user);
<img src="<?=$filename;?>" width="800" height="600"/>

答案 1 :(得分:0)

您可以尝试使用Intervention library。我用它来做你要问的事情。理解起来非常简单,documentation写得很好。