0

私はこのコードを少し前に修正しました..私の問題は、これがアップロードした画像の新しいサムネイルを作成することですが、必要のない.PNG、.JPEGなどの拡張子を追加することです! 今、私の問題は、関数から拡張機能を削除しようとすると、新しいイメージを作成できないことです...

つまり、 createFile 関数から '.'.$this->ext を削除すると、ファイルが作成されなくなります...

これがコードです...少し長いようですが、そうではありません..

if (!empty($_FILES)) {


function setFile($src = null) {
    $this->ext = strtoupper(pathinfo($src, PATHINFO_EXTENSION));

if(is_file($src) && ($this->ext == "JPG" OR $this->ext == "JPEG")) {
        $this->img_r = ImageCreateFromJPEG($src);
    } elseif(is_file($src) && $this->ext == "PNG") {
        $this->img_r = ImageCreateFromPNG($src);
    } elseif(is_file($src) && $this->ext == "GIF") {
        $this->img_r = ImageCreateFromGIF($src);
    }

$this->img_w = imagesx($this->img_r);
    $this->img_h = imagesy($this->img_r);
}

function resize($largestSide = 100) {
    $width = imagesx($this->img_r);
    $height = imagesy($this->img_r);
    $newWidth = 0;
    $newHeight = 0;

    if ($width > $height) {
        $newWidth = $largestSide;
        $newHeight = $height * ($newWidth / $width);
    } else {
        $newHeight = $largestSide;
        $newWidth = $width * ($newHeight / $height);
    }

    $this->dst_r = ImageCreateTrueColor($newWidth, $newHeight);
    imagecopyresampled($this->dst_r, $this->img_r, 0, 0, 0, 0, $newWidth, $newHeight, $width, $height);
    $this->img_r = $this->dst_r;
    $this->img_h = $newHeight;
    $this->img_w = $newWidth;
}

function createFile($output_filename = null) {
    if ($this->ext == "JPG" OR $this->ext == "JPEG") {
        imageJPEG($this->dst_r, $this->uploaddir.$output_filename.'.'.$this->ext, $this->quality);
    } elseif($this->ext == "PNG") {
        imagePNG($this->dst_r, $this->uploaddir.$output_filename.'.'.$this->ext);
    } elseif($this->ext == "GIF") {
        imageGIF($this->dst_r, $this->uploaddir.$output_filename.'.'.$this->ext);
    }

    $this->output = $this->uploaddir.$output_filename.'.'.$this->ext;
}

function setUploadDir($dirname) {
$this->uploaddir = $dirname;
}

function flush() {
$tempFile = $_FILES['Filedata']['tmp_name'];
$targetPath = $_SERVER['DOCUMENT_ROOT'] . $_REQUEST['folder'] . '/';
$targetFile = str_replace('//','/',$targetPath) . $_FILES['Filedata']['name'];

imagedestroy($this->dst_r);
unlink($targetFile);
imagedestroy($this->img_r);

}

}

$tempFile = $_FILES['Filedata']['tmp_name'];
$targetPath = $_SERVER['DOCUMENT_ROOT'] . $_REQUEST['folder'] . '/';
$targetFile = str_replace('//','/',$targetPath) . $_FILES['Filedata']['name'];

move_uploaded_file ($tempFile, $targetFile);

$image = new Image();
$image->setFile($targetFile);
$image->setUploadDir($targetPath);
$image->resize(800);
$image->createFile($_FILES['Filedata']['name']);
$image->flush();
}
4

1 に答える 1

0

コードをフォーマットし、最後に余分な閉じたカーリーを削除すると (関数定義をifステートメントの外に移動しながら)、コードは次のようになります。

<?php

function setFile($src = null) {
    $this->ext = strtoupper(pathinfo($src, PATHINFO_EXTENSION));
    if (is_file($src) && ($this->ext == "JPG" OR $this->ext == "JPEG")) {
        $this->img_r = ImageCreateFromJPEG($src);
    } elseif (is_file($src) && $this->ext == "PNG") {
        $this->img_r = ImageCreateFromPNG($src);
    } elseif (is_file($src) && $this->ext == "GIF") {
        $this->img_r = ImageCreateFromGIF($src);
    }
    $this->img_w = imagesx($this->img_r);
    $this->img_h = imagesy($this->img_r);
}

function resize($largestSide = 100) {
    $width     = imagesx($this->img_r);
    $height    = imagesy($this->img_r);
    $newWidth  = 0;
    $newHeight = 0;

    if ($width > $height) {
        $newWidth  = $largestSide;
        $newHeight = $height * ($newWidth / $width);
    } else {
        $newHeight = $largestSide;
        $newWidth  = $width * ($newHeight / $height);
    }

    $this->dst_r = ImageCreateTrueColor($newWidth, $newHeight);
    imagecopyresampled($this->dst_r, $this->img_r, 0, 0, 0, 0, $newWidth, $newHeight, $width, $height);
    $this->img_r = $this->dst_r;
    $this->img_h = $newHeight;
    $this->img_w = $newWidth;
}

function createFile($output_filename = null) {
    if ($this->ext == "JPG" OR $this->ext == "JPEG") {
        imageJPEG($this->dst_r, $this->uploaddir . $output_filename . '.' . $this->ext, $this->quality);
    } elseif ($this->ext == "PNG") {
        imagePNG($this->dst_r, $this->uploaddir . $output_filename . '.' . $this->ext);
    } elseif ($this->ext == "GIF") {
        imageGIF($this->dst_r, $this->uploaddir . $output_filename . '.' . $this->ext);
    }
    $this->output = $this->uploaddir . $output_filename . '.' . $this->ext;
}

function setUploadDir($dirname) {
    $this->uploaddir = $dirname;
}

function flush() {
    $tempFile   = $_FILES['Filedata']['tmp_name'];
    $targetPath = $_SERVER['DOCUMENT_ROOT'] . $_REQUEST['folder'] . '/';
    $targetFile = str_replace('//', '/', $targetPath) . $_FILES['Filedata']['name'];

    imagedestroy($this->dst_r);
    unlink($targetFile);
    imagedestroy($this->img_r);
}

if (!empty($_FILES)) { 
    $tempFile   = $_FILES['Filedata']['tmp_name'];
    $targetPath = $_SERVER['DOCUMENT_ROOT'] . $_REQUEST['folder'] . '/';
    $targetFile = str_replace('//', '/', $targetPath) . $_FILES['Filedata']['name'];

    move_uploaded_file($tempFile, $targetFile);

    $image = new Image();
    $image->setFile($targetFile);
    $image->setUploadDir($targetPath);
    $image->resize(800);
    $image->createFile($_FILES['Filedata']['name']);
    $image->flush();
}

Imageどこにも定義されていないオブジェクトのメンバー関数であるかのようにこれらのメソッドを呼び出しているため、これはまだ機能しません。PHPマニュアルのオブジェクトとクラスを見てください。

于 2012-08-20T14:38:38.493 に答える