ソース コードでは 2 つのオープン ソースの jQuery プラグインが使用されています。1 つは Ajax アップロード用の Uploadify プラグインで、カスタマイズできないものがたくさんあります。デモで使用すると完璧です。プロジェクトで使用されるアップロードのキャンセルと削除の機能は追加されていません。Flash を必要としない他の jQuery アップロード プラグインも使用できます。 2 つ目は jQuery jCrop で、アップロードされた画像をトリミングするために使用されます。
?サーバー側で 3 つの PHP ファイルを作成しました。config.inc.php には、構成する必要がある唯一の関数が含まれています。アップロードされた画像は、フロント デスクによって呼び出される前に、幅と高さが 500 ピクセル以下の小さな画像に圧縮されます (デフォルト)。これは、ユーザーがより大きな画像をアップロードすると、容量が大きくなるだけではないためです。ストレージスペースだけでなく、サーバーによって大きな画像がトリミングされるため、追加の負荷がかかります。
function resize( $ori ){ if( preg_match('/^http:\/\/[a-zA-Z0-9]+/', $ori ) ){ return $ori; } $info = getImageInfo( ROOT_PATH . $ori ); if( $info ){ //上传图片后切割的最大宽度和高度 $width = 500; $height = 500; $scrimg = ROOT_PATH . $ori; if( $info['type']=='jpg' || $info['type']=='jpeg' ){ $im = imagecreatefromjpeg( $scrimg ); } if( $info['type']=='gif' ){ $im = imagecreatefromgif( $scrimg ); } if( $info['type']=='png' ){ $im = imagecreatefrompng( $scrimg ); } if( $info['width']<=$width && $info['height']<=$height ){ return; } else { if( $info['width'] > $info['height'] ){ $height = intval( $info['height']/($info['width']/$width) ); } else { $width = intval( $info['width']/($info['height']/$height) ); } } $newimg = imagecreatetruecolor( $width, $height ); imagecopyresampled( $newimg, $im, 0, 0, 0, 0, $width, $height, $info['width'], $info['height'] ); imagejpeg( $newimg, ROOT_PATH . $ori ); imagedestroy( $im ); } return; }
?他の 2 つのファイル、upload.php とsize.php は、フロントエンドの Ajax リクエスト画像のアップロードとトリミングにそれぞれ使用されます。必要な画像が 1 つだけで、元の画像を保持する必要がない場合、resize.php は最初のステップでアップロードされた圧縮画像を切り取って N 個の画像にコピーすることに注意してください。元の画像に直接保存することで、多くのリソースを節約できます。画像処理には GD ライブラリを使用しますが、imagick を使用することをお勧めします。