【问题标题】:Can I install Fabric.js using npm for a PHP-based site?我可以使用 npm 为基于 PHP 的站点安装 Fabric.js 吗?
【发布时间】:2016-03-25 17:33:08
【问题描述】:

我目前正在和另外两个人一起做一个项目。我们需要创建一个小型网站,让您可以上传照片,然后在其顶部输入自定义文本作为叠加层。

根据我的研究,Fabric.js 完全符合我们的要求。但是,主站点和某些功能(例如照片上传)已经用 PHP 构建,因为这是另一个人的主要技能之一,我只能找到安装 Fabric 的 Node.js 方法(npm 或 bower) .js。我已经熟悉 Node.js 并安装了 npm,但是如果我创建单独的 .js 文件并在 index.php 中链接到它们,它是否与 PHP 兼容?如果没有,我的替代方案是什么(最好在 JavaScript 或 jQuery 中,但我对其他选项持开放态度)?

【问题讨论】:

  • 这实际上是我们开始研究这个的第一天,所以我还没有走到那一步。所以我应该包括这个,然后在我的 JavaScript 中通常包含 Fabric 的代码?谢谢!
  • 是的,试试看。
  • 客户端还是服务器需要使用fabricjs?

标签: javascript php node.js npm fabricjs


【解决方案1】:

如何运行 FabricJS

FabricJS 可以以两种方式运行 - 客户端或服务器端。

在客户端,它是一个简单的 Javscript 文件,您需要将其加载到网页中。通过这种方式,您可以创建一个 GUI,用户可以在其中操作图像并根据需要保存图像。这就是examples on the FabricJS website 正在做的事情。

在客户端,FabricJS 需要在 NodeJS 服务器上运行。你可以找到一些 basic instructions on the FabricJS website 来了解如何在 NodeJS 中运行它。

优点/缺点

每种方法都有优点/缺点。

在我看来,客户端设置更容易编程(尽管我是一名网络开发人员),并允许您构建一个 GUI,为您的用户创建一个简单的界面供您使用。但是,浏览器和客户端计算机可能会遇到一些限制。例如,如果您正在渲染高分辨率图像,它可能会有一些限制,特别是如果您想将图像发送到服务器。移动设备在分辨率更高的图像方面存在问题。

服务器端设置消除了大部分限制,但消除了任何 GUI 选项。但实际上工作并没有那么糟糕。首先要记住的最让我失望的是,如果您对 NodeJS 代码进行任何更改,您需要在它们生效之前重新启动您的 NodeJS 服务器。但是,如果您熟悉 NodeJS,那就不是什么新鲜事了。

服务器设置

有了上述背景,您的问题是如何在 PHP 服务器上运行 FabricJS。如上所述,FabricJS 需要 NodeJS 才能运行。你可以简单地在你的 PHP 服务器上安装 NodeJS。在此配置下,您现在将拥有两个在相同域名/IP 地址上运行的网络服务器。因此,两者中的一个将需要不同的端口。示例:

http://www.myPHPserver.com(Apache/Nginx 80 端口)

http://www.myPHPserver.com:8080(NodeJS 在端口 8080 或任何开放端口)

或者,您可以选择在不同的服务器上安装 NodeJS 和 FabricJS,并避免端口冲突。示例:

http://www.myPHPserver.com(Apache/Nginx 80 端口)

http://www.myNodeJSserver.com(NodeJS 在端口 80)

跨源脚本

如果您使用网络服务器来处理 FabricJS 脚本,您将遇到需要处理的跨域脚本问题。这将在上面提供的两个服务器配置示例下发生,因为端口或域名会导致跨域设置。但这可以通过执行以下操作来克服:

  • 服务器
    • 在图像上设置 access-control-allow-origin 标头。
  • 浏览器/客户端
    • 将图片的crossOrigin属性设置为匿名

您可以从这篇文章 - Fabric JS Tainted Canvas – Cross-Origin Images 中了解有关如何执行此操作的更多信息。

处理跨域图像的另一种方法是使用server proxy as described here

在 NodeJS 上安装 FabricJS

如果您在 NodeJS 上安装 FabricJS 时需要帮助,这里有一些安装指南。

Install FabricJS on Debian Squeeze 6.0.10

Install FabricJS on Ubuntu 12.04 precise

从 NodeJS 运行 PHP 脚本

根据您的问题,这听起来不像是需要的,但我想我至少会提到它。如果您需要从 NodeJS 服务器调用 PHP 脚本,可以使用 exec 命令来完成。

NodeJS 服务器

var runner = require("child_process");

var phpScriptPath = "path/to/your/php/script.php";
var argsString = "value1,value2,value3";
runner.exec("php " + phpScriptPath + " " +argsString, function(err, phpResponse, stderr) {
if(err) console.log(err); /* log error */
  console.log( phpResponse );
});

PHP 脚本

<?php
$params = explode(",", $argv[1]);
echo $params[0] ." - " . $params[1] . " - " . $params[2];
?>

致电PHP script from NodeJS

【讨论】:

  • 谢谢,太好了!现在,为了简单起见,我们决定使用 PHP 扩展/插件 (WideImage),但请记住这一点!
  • 听起来不错。看起来 Wideimage 使用了 GD2,它确实提供了强大的功能。然而,NodeJS 服务器上的 FabricJS 将使用 ImageMagick(或 GraphicsMagick)。虽然 GD2 更容易使用 IM 或 GM,但它确实需要更高的内存使用率。所以只是把它扔在那里作为一个公平的警告。我以前曾冒险过这样的道路,但后来发现它可能不是最好的选择。所以只是想确保你有能力提前做好功课,而不是在以后进行重建。
【解决方案2】:

因此,您将无法直接从 PHP 调用 npm 模块。也就是说,您始终可以从 PHP 中将一个小型节点程序作为一个简单的 shell 命令运行,但我不建议这样做。

我建议在客户端包含 fabric.js 而根本不使用 node.js。只需让用户在其浏览器中叠加文本,然后上传图片。

PHP 仅在服务器上运行,因此您可以使用它来提供完成工作所需的任何浏览器端 js 代码,但它不会为您解释 javascript 代码并执行它。

【讨论】:

    猜你喜欢
    • 2015-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-21
    • 2018-12-22
    • 1970-01-01
    • 2010-10-15
    • 1970-01-01
    相关资源
    最近更新 更多