1

これは、アップロードされた画像をさまざまなサイズのサーバーフォルダーに保存するために数時間試してきた私のコードです。ただし、画像は保存されておらず、どこが間違っているのかわかりません。以前は、以下の 2 番目のコード部分のように、モバイル側から何らかの方法でバイナリ データを取得して、バイナリで記述していました (写真はカメラから取得し、モバイルからオンザフライで送信されます)。しかし、これによりデータが増加します。モバイル側からもマルチパートタイプのファイルアップロードで画像ファイルをアップロードするためにも使用することにしました。

<?php

$imagefile = $_FILES["uploadphoto1"]["name"];
$errors=0;
$uploadPath  = __DIR__."/contents/uploads";
define ("MAX_SIZE","4000");

$imagename = "testingimage";

if($imagefile)
{
    $filename = stripslashes($_FILES['uploadphoto1']['name']);
    $extension = getExtension($filename);
    $extension = strtolower($extension);

if (($extension != "jpg") && ($extension != "jpeg") && ($extension != "png") && ($extension != "gif"))
    {
        echo ' Unknown Image extension ';
        $errors=1;
    }
    else
    {

        $file1 = $_FILES['uploadphoto1']['tmp_name'];

        thumbnail_image($file1, "640", "480",$uploadPath.$imagename);
        thumbnail_image($file1, "480", "340",$uploadPath.$imagename."_preview");

    }
}else{
    echo "No file is inserted>>>>>>>>>";
}

function thumbnail_image($original_file_path, $new_width, $new_height, $save_path="")
{
    $imgInfo = getimagesize($original_file_path);
    $imgExtension = "";

    switch ($imgInfo[2])
    {
        case 1:
            $imgExtension = '.gif';
            break;

        case 2:
            $imgExtension = '.jpg';
            break;

        case 3:
            $imgExtension = '.png';
            break;
    }

    if ($save_path=="") $save_path = "thumbnail".$imgExtension ;

    // Get new dimensions
    list($width, $height) = getimagesize($original_file_path);

    // Resample
    $imageResample = imagecreatetruecolor($new_width, $new_height);

    if ( $imgExtension == ".jpg" )
    {
        $image = imagecreatefromjpeg($original_file_path);
    }
    else if ( $imgExtension == ".gif" )
    {
        $image = imagecreatefromgif($original_file_path);
    }
    else if ( $imgExtension == ".png" )
    {
        $image = imagecreatefrompng($original_file_path);
    }

    imagecopyresampled($imageResample, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);

    if ( $imgExtension == ".jpg" )
        imagejpeg($imageResample, $save_path.$imgExtension);
    else if ( $imgExtension == ".gif" )
        imagegif($imageResample, $save_path.$imgExtension);
    else if ( $imgExtension == ".png" )
        imagepng($imageResample, $save_path.$imgExtension);

}

function getExtension($str) {

    $i = strrpos($str,".");
    if (!$i) { return ""; }

    $l = strlen($str) - $i;
    $ext = substr($str,$i+1,$l);
    return $ext;
}

if(isset($_POST['Submit']) && !$errors)
{
    echo "Image Uploaded Successfully!";

}else{
    echo "Image uploading failed>>>>>>>";
     }

?>

しかし、以下はバイナリ データを取得していたときと同じ関数で動作しますが、このコードは現在のコードにはまったく含まれていません。

$file1   = tempnam($uploadPath, 'image1');
$fp1     = fopen($file1, 'wb');
fwrite($fp1, $binary1);// Here I have binary data of image. 
fclose($fp1);

thumbnail_image($file1, "640", "480",$uploadPath.$imagelastid.".jpg");

thumbnail_image($file1, "480", "340",$uploadPath.$imagelastid."_preview.jpg");

誰かがこれを解決して正しい軌道に乗せるのを手伝ってくれたら本当にありがたいです。

このエラーが発生します:

getimagesize(): Read error! in C:\xampp\htdocs\MOBILE_PHP\imagephptest.php on line 48

48 行目は --> $imgInfo = getimagesize($original_file_path); です。

時々、同じ行でこのエラーが発生します。

getimagesize(): Filename cannot be empty in C:\xampp\htdocs\MOBILE_PHP\imagephptest.php44行目

4

3 に答える 3

0
list($width, $height, $type, $attr) = getimagesize($original_file_path);
$widthheight="$width X $height";

これにより、最初に画像の幅と高さが得られます。

于 2013-01-31T09:06:11.463 に答える
0

問題は次の 2 行にあると思われます。

$file1 = $_FILES['uploadphoto1']['tmp_name'];
$file1   = tempnam($uploadPath, 'image1');

アップロードされた画像の一時的な名前を取得して $file1 に保存し、その直後にその値を書き換えて一時ファイルを作成します。その後、それを関数に渡し、試したときに

getimagesize($original_file_path);

$original_file_path が画像でさえないため、失敗します。

于 2013-01-31T09:11:17.770 に答える
0

最初に、名前などではなく、$_FILES["uploadphoto1"]['size']>0 をテストしてからプロセスを開始することをお勧めします。また、作業を開始する前に、関数で $original_file_path をテストすることをお勧めします。また、関数の冒頭で $original_file_path を印刷/エコーして、そこに何が得られるかを確認してください。

補足として、Imagick を使用できる場合は、それを使用してください。それほど多くのコードは必要ありません。

于 2013-01-31T10:03:26.940 に答える