0

私はこれが純粋なPHPで実行できることを知っていますが、解決策を見つけることができませんでした。

これが私がこれまでに持っているものです:

<?php 

// posted canvas image data (string), such as: 
// "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAArcAAAHbCAYAAADRQ7"
$data = $_POST['data'];

// remove the "data:image/png;base64," part
$uri =  substr($data,strpos($data,",")+1);

$imgData = base64_decode($uri);

// NOT WORKING: transparent to white pixels
$im = imagecreatefromstring($imgData);
$white = imagecolorallocate($im, 255, 255, 255);
imagefill($im, 0, 0, $white);
// END NOT WORKING

// put the data to a file
file_put_contents('yourimage.png', $imgData);

// force user to download the image
if(file_exists('yourimage.png')){
    // save dialog box
    header('Content-Disposition: attachment; filename="yourimage.png"');
    // output png format
    header('Content-type: image/png');
    // read from server and write to buffer
    readfile('yourimage.png');
}


?>

最初に、PHPがimage / png-Stringを直接変更して透明部分を変更できるかどうかを調べようとしましたが、何も見つかりませんでした。投稿された文字列から画像を作成しようとしましたが、失敗しました...

助けていただければ幸いです。

4

1 に答える 1

2

まず、間違ったファイルを書き出しています。

file_put_contents('yourimage.png', $imgData);

クライアントから送信された元のデコードイメージを書き出すだけです。GDを使用してその画像を操作しているため、変更された画像をGDに書き出す必要があります。

imagepng($im, 'yourimage.png');

ただし、単にその画像をユーザーにダンプしているように見えるため、次のコードと中間の「yourimage.png」ファイルを削除できます。

header('Content-type: image/png');
imagepng($im); // no filename specified, write data out to PHP's output buffer directly.
于 2012-10-25T14:57:07.053 に答える