我已将我的图片移至Rackspace Cloud Files并使用他们的PHP API。我正在尝试执行以下操作:
我的问题在于#2。我希望调整大小而不必先将原件复制到我的服务器(因为图像很大,我想动态调整大小),但无法弄清楚如何。这是我到目前为止(不多):
$container = $conn->get_container("originals");
$obj = $container->get_object("example.jpg");
$img = $obj->read();
部分问题是我不完全理解read()函数返回的内容。我知道$ img包含对象的“数据”(我能够打印出来作为乱码),但它既不是文件也不是网址,也不是图像资源,所以我不知道如何处理它。有可能以某种方式将$ img转换为图像资源吗?我试过了imagecreatefromjpeg($ img)但是没有用。
谢谢!
答案 0 :(得分:3)
首先,如果不将图像加载到内存中,则无法调整图像大小。除非远程服务器提供了一些“为我调整图像大小,这里是参数” API,您必须在脚本中加载图像来操作它。因此,您必须将文件从CloudFiles容器复制到服务器,对其进行操作,然后将其发送回存储。
您从$obj->read()
收到的数据是图像数据。那是文件。它没有文件名,它没有保存在硬盘上,但它是整个文件。要将其加载到gd
以对其进行操作,您可以使用imagecreatefromstring
。这类似于使用imagecreatefrompng
,只有imagecreatefrompng
想要从文件系统中读取文件,而imagecreatefromstring
只接受数据你已经加载到内存中了。
答案 1 :(得分:0)
您可以尝试将$ img变量的内容转储到可写文件中,如下所示:
<?php
$filename = 'modifiedImage.jpg';
/*
* 'w+' Open for reading and writing; place the file pointer at the beginning of the file and truncate
* the file to zero length. If the file does not exist, attempt to create it.
*/
$handle = fopen($filename, 'w+');
// Write $img to the opened\created file.
if (fwrite($handle, $img) === FALSE) {
echo "Cannot write to file ($filename)";
exit;
}
echo "Success, wrote to file ($filename)";
fclose($handle);
?>
更多详情:
http://www.php.net/manual/en/function.fopen.php
http://www.php.net/manual/en/function.fwrite.php
修改强> 的
您可能还想仔细检查read()函数返回的数据类型,因为如果数据不是jpg图像,如果它是例如png,则需要相应地更改文件的扩展名。