1

ギャラリーにアップロードする画像を含むテキスト メッセージを iPhone から送信してくれるクライアントがいます。テキストから画像を取得し、iPhone の管理ページに移動して、画像をギャラリーに直接アップロードできるように、管理システムを作成しようとしています。

これにより、日々の仕事のスケジュールを大幅に節約できます。

提供されたコードを使用します。次の機能を追加するにはどうすればよいですか。

  1. Photoshop の Web jpg 機能に保存するのと同じように、ファイル サイズをできれば小さいサイズに圧縮したいと考えています。(私が取得するほとんどの画像は約 1 ~ 3 MB です。最大約 150 ~ 500 kb に減らしたいと考えています)

  2. 幅を自動的に 760px に変更したいのですが、縦横比を維持して画像がつぶれないようにします。彼は私に横向きと縦向きの画像を送ってくれます。

  3. iPhoneの画像です。拡張子は .JPG (すべて大文字) です。これを .jpg (すべて小文字) に変更したいと思います。

これらの関数のいずれかが非常に役立ちますが、3 つすべてが私の状況に理想的です。

これが私が使用しているコードですか?

これは、@tman が提供する画像をアップロードおよびサイズ変更するための最終的な正しいコードです。php.ini ファイルに imagick がインストールされていることを確認してください。ホスティングプロバイダーに確認してインストールしてください。

<?php
include($_SERVER['DOCUMENT_ROOT'] . "/connections/dbconnect.php");



for($i=0;$i<count($_FILES["image"]["name"]);$i++){
if($_FILES["image"]["name"][$i] != ''){ // don't insert if file name empty
$dataType = mysql_real_escape_string($_POST["dataType"][$i]);
$title = mysql_real_escape_string($_POST["title"][$i]);

$fileData = pathinfo($_FILES["image"]["name"][$i]);
$fileName = uniqid() . '.' . $fileData['extension'];
$target_path = $_SERVER['DOCUMENT_ROOT'] . "/images/gallery/" . $fileName;

if (move_uploaded_file($_FILES["image"]["tmp_name"][$i], $target_path)){ // The file is in the images/gallery folder.
// Insert record into database by executing the following query:
$sql="INSERT INTO images (data_type, title, file_name) "."VALUES('$dataType','$title','$fileName')";
$retval = mysql_query($sql);


///NEW

$size = getimagesize($target_path);
$width=$size[0];

$height=$size[1]; 
$newwidth = 760;
$newheight = $height*($newwidth/$width);
$pic = new Imagick($target_path);//specify name
$pic->resizeImage($newwidth,$newhight,Imagick::FILTER_LANCZOS,1);
unlink($target_path);
$pic->writeImage($target_path);
$pic->destroy();
///NEW


echo "The image {$_FILES['image']['name'][$i]} was successfully uploaded and added to the gallery<br />
<a href='index.php'>Add another image</a><br />";
}
else
{
echo "There was an error uploading the file {$_FILES['image']['name'][$i]}, please try again!<br />";
}
}
} // close your foreach
?>

uploader.php 元のコード。一度に 4 つの画像をアップロードできます。動作します!!!

<?php
include($_SERVER['DOCUMENT_ROOT'] . "/connections/dbconnect.php");

for($i=0;$i<count($_FILES["image"]["name"]);$i++){
  if($_FILES["image"]["name"][$i] != ''){ // don't insert if file name empty
    $dataType = mysql_real_escape_string($_POST["dataType"][$i]);
    $title = mysql_real_escape_string($_POST["title"][$i]);

    $fileData = pathinfo($_FILES["image"]["name"][$i]);
    $fileName = uniqid() . '.' . $fileData['extension'];
    $target_path = $_SERVER['DOCUMENT_ROOT'] . "/images/gallery/" . $fileName;

  if (move_uploaded_file($_FILES["image"]["tmp_name"][$i], $target_path)){    // The file is in the images/gallery folder. 
    // Insert record into database by executing the following query:
     $sql="INSERT INTO images (data_type, title, file_name) "."VALUES('$dataType','$title','$fileName')";
     $retval = mysql_query($sql);

    echo "The image {$_FILES['image']['name'][$i]} was successfully uploaded and added to the gallery<br />
     <a href='index.php'>Add another image</a><br />";
  }
  else
  {
   echo "There was an error uploading the file {$_FILES['image']['name'][$i]}, please try again!<br />";
    }
  }
} // close your foreach
?>

参考までに、これにより、画像に一意の名前を付けたり、幅を変更したり、正しい縦横比を維持したり、複数のファイルを同時にアップロードしたりできます。

すごいもの!

4

2 に答える 2

2

このような:

$filelocation='http://help.com/images/help.jpg';
$newfilelocation='http://help.com/images/help1.jpg';

$size = getimagesize($filelocation);
$width=$size[0];//might need to be ['1'] im tired .. :)
$height=$size[1];
// Plz note im not sure of units pixles? & i could have the width and height   confused
//just had some knee surgery so im kinda loopy :) 
$newwidth = 760;
$newheight = $height*($newwidth/$width) 


 $pic = new Imagick( $filelocation);//specify name
 $pic->resizeImage($newwidth,$newhight,Imagick::FILTER_LANCZOS,1);
 //again might have width and heing confused
 $pic->writeImage($newfilelocation);//output name
 $pic->destroy();
 unlink($filelocation);//deletes image
于 2013-07-15T06:13:33.817 に答える