14

複数の画像があります - Base64 文字列として保存されており、これらの画像のサイズを変更してサムネイルを取得したいと考えています...

Javascript (Node-Server) を使用してサイズを変更するのが最善ですが、php でもサイズを変更できます。

前もって感謝します

4

4 に答える 4

17

Jon Hanna の方法に同意します: Do Parsing the Base64code then load it to GD Image before Resample. ただし、それをデータとして戻すのは、私ほど簡単ではありません。GAE の php では、php.ini ファイルで設定して出力バッファリングを有効にする必要があります。output_buffering = "On"

ここでは、手順を詳しく説明します。

このドキュメントは、Base64code の解析を使用して画像リソースを作成するための参照として使用されます: http://php.net/manual/en/function.imagecreatefromstring.php

// Create image resource from Base64code
$data64 = 'iVBORw0KGgoAAAANSUhEUgAAABwAAAASCAMAAAB/2U7WAAAABl'
        . 'BMVEUAAAD///+l2Z/dAAAASUlEQVR4XqWQUQoAIAxC2/0vXZDr'
        . 'EX4IJTRkb7lobNUStXsB0jIXIAMSsQnWlsV+wULF4Avk9fLq2r'
        . '8a5HSE35Q3eO2XP1A1wQkZSgETvDtKdQAAAABJRU5ErkJggg==';
$image = imagecreatefromstring(base64_decode($data64));

これは、 Resample関数 に直接配置できる画像リソースです: http://php.net/manual/en/function.imagecopyresampled.php

// Resample
$image_p = imagecreatetruecolor($new_w, $new_h);
imagecopyresampled($image_p, $image, 0, 0, 0, 0, $new_w, $new_h, $org_w, $org_h);

結果は画像リソースでもあります。データとして取得するには、Bufferingが必要です。画像リソースから base64 でエンコードされた文字列を作成する方法を
見る

// Buffering
ob_start();
imagepng($image_p);
$data = ob_get_contents();
ob_end_clean();

以下のドキュメントを使用して、プロジェクトに GCS バケットをウェブサイトとして設定し、直接保存して表示できるようにします: https://cloud.google.com/storage/docs/website-configuration#tips

//Store & Display
$context = stream_context_create([
   'gs' =>[
        'acl'=> 'public-read', 
        'Content-Type' => 'image/jpeg', 
        'enable_cache' => true, 
        'enable_optimistic_cache' => true,
        'read_cache_expiry_seconds' => 300,
    ]
]);
file_put_contents("gs://mybucket/resample/image.jpeg", $data, false, $context); 
header("Location: http://mybucket/resample/image.jpeg");
于 2015-03-25T08:41:35.710 に答える
4

最善の策は、PHP でPHPThumbを使用することです。

別の方法は、お好みで ImageMagick を呼び出すことです。

于 2012-09-01T23:37:54.297 に答える
3

node.jsでそれを行う方法(または何か)はわかりませんが、質問のPHPビットは確かに可能です。Base64 を解析した後、それをGD イメージにロードしてから、再サンプリングします。

http://php.net/manual/en/function.imagecopyresampled.php

于 2012-09-01T23:37:00.867 に答える