2

画像をRackspaceCloudFilesに移動し、PHPAPIを使用しています。私は次のことをしようとしています:

  1. 「オリジナル」コンテナから画像を取得する
  2. サイズを変更したり、研いだりします。
  3. サイズ変更された画像を「thumbs」コンテナに保存します

私の問題は#2にあります。最初にオリジナルをサーバーにコピーせずにサイズを変更したいと思っていましたが(画像が大きく、動的にサイズを変更したいため)、方法がわかりません。これは私がこれまでに持っているものです(あまりありません):

$container = $conn->get_container("originals"); 
$obj = $container->get_object("example.jpg"); 
$img = $obj->read();

問題の一部は、read()関数によって何が返されるのかを完全に理解していないことです。$ imgにオブジェクトの「データ」(ジブリッシュとして印刷できた)が含まれていることは知っていますが、ファイルでもURLでも画像リソースでもないため、処理方法がわかりません。どういうわけか$imgを画像リソースに変換することは可能ですか?imagecreatefromjpeg($ img)を試しましたが、うまくいきませんでした。

ありがとう!

4

2 に答える 2

3

まず、イメージをメモリにロードせずにサイズを変更することはできません。リモートサーバーが「画像のサイズを変更します。パラメーターは次のとおりです」 API を提供しない限り、画像を操作するには、スクリプトに画像をロードする必要があります。そのため、ファイルを CloudFiles コンテナーからサーバーにコピーし、操作してから、ストレージに送り返す必要があります。

受け取るデータ$obj->read()は画像データです。それがファイルですファイル名がなく、ハードディスクに保存されていませんが、ファイル全体です。これを にロードしgdて操作するには、 を使用できますimagecreatefromstring。これは、たとえば、ファイルシステムからファイルを単独で読み取りたいだけで、メモリに既にロードされているデータを受け入れるのとていimagecreatefrompngます。imagecreatefrompngimagecreatefromstring

于 2011-09-06T04:32:44.820 に答える
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

編集:

データが jpg 画像ではない場合、たとえば png の場合は、ファイルの拡張子を適宜変更する必要があるため、read() 関数によって返されるデータのタイプを再確認することもできます。

于 2011-09-06T00:23:28.253 に答える