【发布时间】:2016-01-07 21:43:21
【问题描述】:
我有一个 PHP 脚本,它使用服务器上的图像处理 GD/ImageMagick 库在图像上生成文本字符串。
下图是一个演示。
如果我将 2 行文本生成为 2 个相互堆叠的图像,并使用 JavaScript 允许用户通过分片和拖放来重新排列 2 个图像在背景图像上的位置。
如何在用户放置它们的位置保存带有 2 个文本图像的新图像?
更新
下面是一个快速演示,它会在图像上生成一个文本,就像我上面的演示图像一样。
我会使用用户数据将这些图像加载到页面中以生成他们想要的文本,然后我将使用 JavaScript 将它们拖放到页面中。
单击提交按钮时,我需要获取所有用户生成的文本图像的坐标并将它们发布到 PHP 脚本,该脚本将生成 1 个新的大图像,其中包含所有文本图像并将它们定位在用户的位置将它们拖放到适当的位置。
- 我需要帮助以获取所需的正确坐标。
- 在 PHP 端使用这些坐标构建一个新图像。
Demo JSFiddle 像上面那样加载一个图像文本文件。 https://jsfiddle.net/jasondavis/nreme6yf/
<?php
/* Create some objects */
$image = new Imagick();
$draw = new ImagickDraw();
$pixel = new ImagickPixel( 'black' );
/* New image */
$image->newImage(1000, 175, $pixel);
/* text color */
//$draw->setFillColor('white');
/* Font properties */
if(isset($_GET['font'])){
$fontName = $_GET['font'];
}else{
$fontName = 'MISTRESS.ttf';
}
if(isset($_GET['font-size'])){
$fontSize = $_GET['font-size'];
}else{
$fontSize = 30;
}
if(isset($_GET['fill-color'])){
$fillColor = $_GET['fill-color'];
}else{
$fillColor = 'ffffff';
}
if(isset($_GET['stroke-color'])){
$strokeColor = $_GET['stroke-color'];
}else{
$strokeColor = '000000';
}
if(isset($_GET['stroke-width'])){
$strokeWidth = $_GET['stroke-width'];
}else{
$strokeWidth = 1;
}
if(isset($_GET['x'])){
$x = $_GET['x'];
}else{
$x = 10;
}
if(isset($_GET['y'])){
$y = $_GET['y'];
}else{
$y = 115;
}
if(isset($_GET['angle'])){
$angle = $_GET['angle'];
}else{
$angle = 0;
}
if(isset($_GET['text'])){
$text = $_GET['text'];
}else{
$text = 'The quick brown fox jumps over the lazy dog';
}
$draw->setFont('fonts-ttf/'.$fontName);
$draw->setFontSize($fontSize);
$draw->setFillColor('#'.$fillColor);
$draw->setStrokeColor(new ImagickPixel('#'.$strokeColor));
$draw->setStrokeWidth($strokeWidth);
$draw->setStrokeAntialias(true);
$draw->setTextAntialias(true);
/* Create text */
$image->annotateImage($draw, $x, $y, $angle, $text);
/* Give image a format */
$image->setImageFormat('png');
/* Output the image with headers */
header('Content-type: image/png');
echo $image;
?>
【问题讨论】:
-
新的 html canvas 元素不能做这样的事情吗?
-
您是在问如何进行拖放?或者如何将坐标传回服务器?或者如何加入图像?您希望使用 Javascript 或 PHP 得到答案吗?我们应该使用 GD 还是 ImageMagick?
-
@MarkSetchell 我可以在屏幕上获得 2 个文本字符串图像,如上图所示,我可以使它们可拖动。我想要做的是创建一个新图像,将 2 个文本图像定位到用户将它们拖动到的位置。所以在拖动后我会假设需要获取屏幕上所有文本图像的坐标并发布到服务器,然后在服务器上创建一个使用坐标定位图像的新图像....继续...
-
@MarkSetchell ...继续...我不确定我需要什么确切的坐标或获取它们。在服务器端,如果我有坐标,我不确定如何创建一个将所有这些组合成 1 的新图像。我正在更新我的问题以显示生成文本图像的 PHP 代码。
-
@Dagon 我以前从未使用过 Canvas,所以我也会将其视为可能的解决方案,谢谢
标签: javascript php jquery imagemagick gd