-1

メモリにアップロードされたすべてのファイルに透かしを追加し、ファイルを特定のフォルダーに保存するアップロード機能を作成しようとしています。ただし、コードの透かし部分を機能させることができません。透かしコードが追加されていなくても、アップロード機能が機能することは確かです。エラーは、透かしコードが一時ファイルをハードドライブに移動するコードに「転送」する場所にあるに違いないと思います。この問題を解決するにはどうすればよいですか?

コードは次のとおりです。

foreach($_FILES['files']['tmp_name'] as $key => $tmp_name ){

            $file_name = $_FILES['files']['name'][$key];
            $file_size =$_FILES['files']['size'][$key];
            $file_tmp =$_FILES['files']['tmp_name'][$key];
            //$file_type=$_FILES['files']['type'][$key];    

            //if($file_size > 2097152){

                //$errors[]='File size must be less than 2 MB';
            //}
            // echo '<img src="../images/watermark.gif">';

            $q = "INSERT INTO media (file_name, album_id, file_size) VALUES ('$file_name','$album_id', '$file_size')";

            $r = mysqli_query ($dbc, $q);

            $desired_dir = '../../customers/' . $customerFolder . '/';

            // load the watermark and the photo
            $watermark = imagecreatefromgif('../images/watermark.gif');
            $photo = imagecreatefromjpeg($file_tmp);

            // center watermark on the photo
            $wx = imagesx($photo)/2 - imagesx($watermark)/2;
            $wy = imagesy($photo)/2 - imagesy($watermark)/2;

            imagecopy($photo, $watermark, $wx, $wy, 0, 0, imagesx($watermark), imagesy($watermark));

            if(empty($errors)==true){

                    move_uploaded_file($photo,"$desired_dir".$file_name);

                //mysql_query($q);  

            }else{
                print_r($errors);
            }
        }
4

2 に答える 2

1

私は次の解決策を思いつきました:

// Load the stamp and the photo to apply the watermark to
$stamp = imagecreatefromgif('../images/watermark.gif');

$marge_right = 10;
$marge_bottom = 10;
$sx = imagesx($stamp);
$sy = imagesy($stamp);

if(isset($_FILES['files'])){

        $errors= array();

        foreach($_FILES['files']['tmp_name'] as $key => $tmp_name ){

            $file_name = $_FILES['files']['name'][$key];
            $file_size =$_FILES['files']['size'][$key];
            $file_tmp =$_FILES['files']['tmp_name'][$key];
            $file_type=$_FILES['files']['type'][$key];  

            //if($file_size > 2097152){

                //$errors[]='File size must be less than 2 MB';
            //}
            // echo '<img src="../images/watermark.gif">';

            $q = "INSERT INTO media (file_name, album_id, file_size) VALUES ('$file_name','$album_id', '$file_size')";

            $r = mysqli_query ($dbc, $q);

            $desired_dir = '../../customers/' . $customerFolder . '/';

            $im = imagecreatefromjpeg($file_tmp);

            imagecopymerge($im, $stamp, imagesx($im) - $sx - $marge_right, imagesy($im) - $sy - $marge_bottom, 0, 0, imagesx($stamp), imagesy($stamp), 50);

            $newPath = "$desired_dir".$file_name;

            imagepng($im, $newPath);

            if(empty($errors)==true){

                    move_uploaded_file($newPath,"$desired_dir".$file_name);
                    imagedestroy($im);
                //mysql_query($q);  

            }else{
                print_r($errors);
            }
        }

        if(empty($error)){
            return 'ok';

        }else {
            return 'Kunne ikke uploade!';
        }
    }
于 2013-05-19T21:45:25.203 に答える
0

変数で使用しようとしmove_uploaded_fileていresourceます。

move_uploaded_file は、一時ファイルへの絶対パスである文字列を受け入れます。

既に一時ファイルをリソースに読み込んでいるので、リソースをディスクに書き込むことができます:

imagejpeg($photo,$desired_dir.$file_name);

一時ファイルは自動的にクリーンアップされます。

于 2013-05-19T20:16:33.437 に答える