1

Androidから画像を送信し、サーバーにphpコードを保存して保存したいと思います。サーバーを保護する必要があるため、イメージを再処理する必要があるため、GDまたはImagickを使用する必要があります。画像はbase64でエンコードされて送信されます。phpファイルでデコードされ、私が使用する場合:

$img=base64_decode($img);
$file = fopen('test.jpg', 'wb');
fwrite($file, $img);
fclose($file);

画像はサーバーに保存されます。ImagickまたはGDを使用すると、画像が保存されず、その後にエコーを挿入してもphpファイルから何も返されません。何か助けはありますか?GDで私は使用していました:

$img=base64_decode($img);
$imageinfo = getimagesize($img);
if($imageinfo['mime'] == 'image/gif'{
    $img = @imagecreatefromjpeg($img);
    imagejpeg($img, ""testt.jpg", 80);
}

とImagickで:

$img=base64_decode($img);
$img = imagick($img); //neither if I use a path of an image saved in my server 
                      //works
$mime = mime_content_type($img);
    switch ($mime):
        case 'image/jpeg':
            $ext = '.jpg';
            break;
    endswitch;

$img->stripImage();
$img->writeImage(""testt".$ext);
$img->clear();
$img->destroy();
4

1 に答える 1

1

imagickはファイルに対してのみ機能するため、残念ながらハンドルを指定することはできません。そのため、次のようにします。

$img=base64_decode($img);
$filename = tempnam(sys_get_temp_dir(), 'tempimage_'); 
$file = fopen($filename, 'wb');
fwrite($file, $img);
fclose($file);

$img = imagick($filename);  
$mime = mime_content_type($img);
    switch ($mime):
        case 'image/jpeg':
            $ext = '.jpg';
            break;
   endswitch;

$img->stripImage();
$img->writeImage("testt".$ext);
$img->clear();
$img->destroy();

これは、理論的には機能するはずです。

于 2012-07-28T16:47:31.407 に答える