ホームページ > バックエンド開発 > PHPチュートリアル > 2 日間取り組んだ後、完了しなかったので、失敗したと宣言し、専門家に助けを求めました。 !

2 日間取り組んだ後、完了しなかったので、失敗したと宣言し、専門家に助けを求めました。 !

WBOY
リリース: 2016-06-23 14:14:04
オリジナル
797 人が閲覧しました

次のコードは、画像を四隅すべての円に直接処理できます。
ただし、現在生成される画像はファイルを生成しません。処理したいファイルは指定したディレクトリに生成されます。 。
2日間試してみましたが、まだ効果がありません。 。 。専門家に助けを求めてください。 。ありがとう!
たとえば、次の URL を実行します: http://www.xxx.com/pic.php?gopic=1234.jpg

pic.php コードは次のとおりです:

<?php  class RoundedCorner {      private $_r;      private $_g;      private $_b;      private $_image_path;      private $_radius;           function __construct($image_path, $radius, $r = 255, $g = 255, $b = 255) {           $this->_image_path = $image_path;          $this->_radius = $radius;          $this->_r = (int)$r;          $this->_g = (int)$g;          $this->_b = (int)$b;      }            private function _get_lt_rounder_corner() {          $radius = $this->_radius;          $img = imagecreatetruecolor($radius, $radius);          $bgcolor = imagecolorallocate($img, $this->_r, $this->_g, $this->_b);          $fgcolor = imagecolorallocate($img, 0, 0, 0);          imagefill($img, 0, 0, $bgcolor);          imagefilledarc($img, $radius, $radius, $radius*2, $radius*2, 180, 270, $fgcolor, IMG_ARC_PIE);          imagecolortransparent($img, $fgcolor);          return $img;      }            private function _load_source_image() {          $ext = substr($this->_image_path, strrpos($this->_image_path, '.'));          if (empty($ext)) {              return false;             }          switch(strtolower($ext)) {              case '.jpg':                  $img = @imagecreatefromjpeg($this->_image_path);                  break;              case '.gif':                  $img = @imagecreatefromgif($this->_image_path);                  break;              case '.png':                  $img = @imagecreatefrompng($this->_image_path);                  break;              default:                  return false;          }          return $img;                }            public function round_it() {          // load the source image          $src_image = $this->_load_source_image();          if ($src_image === false) {              die('错误:图片不存在');           }          $image_width = imagesx($src_image);          $image_height = imagesy($src_image);                    // create a new image, with src_width, src_height, and fill it with transparent color          $image = imagecreatetruecolor($image_width, $image_height);          $trans_color = imagecolorallocate($image, $this->_r, $this->_g, $this->_b);          imagefill($image, 0, 0, $trans_color);                    // then overwirte the source image to the new created image          imagecopymerge($image, $src_image, 0, 0, 0, 0, $image_width, $image_height, 100);                    // then just copy all the rounded corner images to the 4 corners          $radius = $this->_radius;          // lt          $lt_corner = $this->_get_lt_rounder_corner();          imagecopymerge($image, $lt_corner, 0, 0, 0, 0, $radius, $radius, 100);          // lb          $lb_corner = imagerotate($lt_corner, 90, $trans_color);          imagecopymerge($image, $lb_corner, 0, $image_height - $radius, 0, 0, $radius, $radius, 100);          // rb          $rb_corner = imagerotate($lt_corner, 180, $trans_color);          imagecopymerge($image, $rb_corner, $image_width - $radius, $image_height - $radius, 0, 0, $radius, $radius, 100);          // rt          $rt_corner = imagerotate($lt_corner, 270, $trans_color);          imagecopymerge($image, $rt_corner, $image_width - $radius, 0, 0, 0, $radius, $radius, 100);                    // set the transparency          imagecolortransparent($image, $trans_color);          // display it          header('Content-Type: image/png');          imagepng($image);                    imagedestroy($src_image);          imagedestroy($image);          imagedestroy($lt_corner);          imagedestroy($lb_corner);          imagedestroy($rb_corner);          imagedestroy($rt_corner);      }   }  $rounder = new RoundedCorner($_GET['gopic'], 20);  $rounder->round_it();  ?>
ログイン後にコピー


ディスカッションに返信 (解決策)

兄さん、画像を保存してください saveas() を使用して、指定したディレクトリに配置できるようにしてください

この投稿は xuzuning によって最終編集されました: 2013-06-23 19:07:04

public functionround_it( $filename= '') {
... .
header('Content-Type: image/png'); を通じて全体を通して ‐ ‐
}

public functionround_it($filename='') {
….
header('Content-Type: image/png')
if($filename) imagepng($image, $filename); else imagepng($image);
imagedestroy($src_image) ;
を使用してthrough through using ' s ' s through ' ‐ ‐ ‐‐‐‐‐‐ ‐               

モデレーター。 。これはあなたの代わりですか?出来ないよ。 。

完全なものを直接教えてもらえますか?

兄弟、指定したディレクトリに配置できるように、saveas() を使用して画像を保存してください
アイデアはわかりましたが、具体的なコードの書き方は?整理するのを手伝ってください。 。出来ないよ。 。

まだディレクトリに写真を保存できません。

public functionround_it($filename='') {
....
header('Content-Type: image/png');
if($filename) imagepng($image, $filename); ng ($image);
imagedestroy($lt_corner);
imagedestroy($rt_corner);

モデレータの変更を使用し、

$rounder->round_it(保存したいディレクトリ); を呼び出すときに

imagepng($image) を
imagepng($image,$src_image); に変更します。試してみてください

上記は間違っています。変更する必要があります

imagepng($image);

imagepng($image,$this->_image_path); に変更します

他は何も変更しないでください

imagepng($image); を
imagepng($image,$this->_image_path); に変更するだけです
他は何も変更しないでください

試してみましたが、うまくいきません写真を撮ることすらできません。
それとも私のコードが間違っているのでしょうか?モデレータは変更を投稿して私に見せてもらえますか?
それ以外の場合は、コードを設定するときに間違いを犯した可能性がありますか? ?


public functionround_it( $filename='') {

....

header('Content-Type: image/png')
if($filename) imagepng($image, $filename); imagepng($image);
imagedestroy($rb_corner);
モデレーターが行った変更を使用して、
$rounder->round_it(the保存したいディレクトリ);

それも機能せず、混乱しました。 。コードを直接投稿してください。 。ありがとう!

誰も助けてくれないの?
私はいつもあなたの言うとおりにします、あなたがすべてをやるとうまくいきません。 。 。


imagepng($image);

imagepng($image,$this->_image_path); に変更するだけです
他は何も変更しないでください

試してみましたが、うまくいきませんでした画像すら表示されなくなります。

それとも私のコードが間違っているのでしょうか?モデレーターが変更を投稿して私に見せてもらえますか?

それ以外の場合、コードを設定するときに間違いを犯した可能性がありますか? ?

動作しないのはおかしいです。テストしてみたところ、正常に動作しました



これはあなたのプログラムを使用する前の写真です

以下はあなたのプログラムを使用した後の写真です



2 つを反転させます写真は上下逆さまです

最初の写真はあなたのプログラムを使用して処理されました
下の 1 つは元の写真です

反転すると、2 つの写真が反転します


最初の写真はあなたのプログラムを使用して処理されました
下の 1 つは元の写真です
実際に試してみた No. 。 。先ほど間違ったコードを教えてくれましたか? ? ?
コードを直接投稿した方がよいでしょう。 。まだ騙されてもいいんじゃないでしょうか?本当にうまくいきません。 。 。
投稿するだけで完了です。 。

bool imagepng ( resource image [, string filename] )

imagepng() GD 画像ストリーム (画像) を PNG 形式で標準出力 (通常はブラウザ) に出力します。または、ファイル名が filename で指定されている場合は、この出力に出力されます。ファイル。


反転すると、2 つの写真が逆になります

最初の写真はプログラムを使用して処理されました
下の写真は元の写真です
試してみましたが、本当にうまくいきませんでした。 。 。先ほど間違ったコードを教えてくれましたか? ? ?
コードを直接投稿した方がよいでしょう。 。まだ騙した方が良かったんじゃないでしょうか?本当にうまくいきません。 。 。

投稿するだけで完了です。 。


imagepng($image); を imagepng($image,$this->_image_path); に直接変更しました

他には何も変更されていません

ああ、もう 1 つ注意すべき点は、プログラムにはまだ関数がないことです。他のフォルダーにコピーして移動 (アップロード) するため、生成した角の丸い画像が元の画像を覆うことになります

元の画像を破壊せずに別のフォルダーに画像を生成したい場合は、まずコピーして移動する必要があります (つまり、アップロード) を別のフォルダー (指定したフォルダー) に移動し、移動したファイルを使用して上記の角丸処理を実行します

ああ、もう 1 つ注意すべき点は、プログラムがまだ残っているため、コピーして移動する機能がないことです (つまり、アップロード) を他のフォルダーに保存するため、生成した角の丸い画像が元の画像を覆います
では、名前付きファイルを出力したい場合は、どのように作成すればよいでしょうか?

ああ、もう 1 つ注意すべき点は、プログラムには他のフォルダーにコピーして移動 (つまり、アップロード) する機能がないため、生成した角の丸い画像が元の画像を覆ってしまうことです
これは本当に言葉にならない、詐欺です。言っておきますが、実際にメソッドに従って imagepng($image) から imagepng($image,$this->_image_path); に変更すると、機能しません。 ! ! ! ! ! ! !
自分で試してみましたか? ? ? ? ? ? ?


ああ、もう 1 つ注意すべき点は、プログラムには他のフォルダーにコピーして移動 (つまり、アップロード) する機能がないため、生成した角の丸い画像が元の画像を覆ってしまうことです
なんてことだろう。浮気!言っておきますが、実際にメソッドに従って imagepng($image) から imagepng($image,$this->_image_path); に変更すると、機能しません。 ! ! ! ! ! ! !
自分で試してみましたか? ? ? ? ? ? ?
言葉が出ない、もし試していなかったら、なぜあの 2 枚の写真が残っていたのでしょうか?


処理前
使用したプログラム

実行結果


処理後の結果:


処理前
使用したプログラム

実行結果


処理後の結果:


それは間違いないと結論付けることができますあなたが教えてくれたコードの中に、変更する必要があるものはありますか?
あなたが言ったように、この文を本当に変更しました。うまくいきません! ! ! ! !
そして、変更後は、ファイルが生成されないだけでなく、画像も表示されなくなります。ご覧のとおり:

元の画像を破壊せずに別のフォルダーに画像を生成したい場合は、まず別のフォルダー (指定したフォルダー) にコピーして移動 (つまり、アップロード) してから、move メソッドを使用する必要があります。ファイルは次のとおりです。上記の角丸加工をさせて頂きました

誠に申し訳ございません。 。それでおしまい! ! !実は私のパソコンに問題があるのです! ! ! ! !
コンピューターを変えるだけです! ! !無言。 。 。本当に恥ずかしいです、司会者! ! !

そこで別の質問なのですが、生成した画像出力を指定したディレクトリに保存したい場合はどのように書けばよいのでしょうか?


元の画像を破壊せずに別のフォルダーに生成したい場合は、まず画像をコピーして別のフォルダー (指定したフォルダー) に移動 (つまり、アップロード) してから、移動したファイルを使用する必要があります 上記の丸め処理を実行します

本当にごめんなさい。 。それでおしまい! ! !実は私のパソコンに問題があるのです! ! ! ! !
コンピューターを変えるだけです! ! !無言。 。 。本当に恥ずかしいです、司会者! ! !

そこで別の質問なのですが、生成した画像出力を指定したディレクトリに保存したい場合はどのように書けばよいのでしょうか?

#20 でこれを言いました
「元の画像を破壊せずに画像を別のフォルダーに生成したい場合は、まず画像をコピーして別のフォルダー (指定したフォルダー) に移動 (つまり、アップロード) する必要があります。移動したファイルを使用して、上記の角丸処理を実行します。」

元の画像を破壊せずに別のフォルダーに画像を生成したい場合は、最初に画像をコピーして別のフォルダー (指定したフォルダー) に移動 (つまり、アップロード) する必要があります。そして、移動したファイルを使って上記の角丸加工を行います
こっちの方が面倒じゃないですか?
www.xxx.com/pic.php?pic=123.jpg を直接使用して、ファイル実行によって指定されたディレクトリにファイルを生成することは不可能ですか?


元の画像を壊さずに別のフォルダーに生成したい場合は、まず別のフォルダー(指定したフォルダー)にコピーして移動(アップロード)してから、移動したファイルを使用する必要があります面倒ではありませんか上記のフィレット処理を実行するには?
www.xxx.com/pic.php?pic=123.jpg を直接使用して、ファイル実行によって指定されたディレクトリにファイルを生成することは不可能ですか?

気絶、もちろん可能です

ファイルのコピーと移動、なぜできないのですか?

重要なのは、ファイルのコピーと移動のプログラムを作成する必要があるということです

保存時に元の画像名を使用する場合は、保存時に乱数を追加します。そうしないと、生成された画像は保存時に元の画像のままになります。


または、保存時に名前を変更します。

重要なのは、ファイルのコピーと移動のプログラムを作成する必要があるということです

ファイルの名前を変更するだけですよね?たとえば、生成されたファイルは、指定されたディレクトリ okpic but に保存されます。 。今夜試してみましたが、うまくいきませんでした。 。 。コードは常に間違って書かれます。 。 。 。
助けを求め続けるにはどう書けばいいですか?


关键是你要写文件复制移动程序
我就文件重命名行吧?例如生成的文件保存到指定目录okpic里面,可是。。我今晚试了也不行。。。代码总写不对。。。。
继续求救如何写?
我想问你,你懂文件复制移动么?

简单的不能再简单

只要在
private function _load_source_image() {
这个函数的
$ext = substr($this->_image_path, strrpos($this->_image_path, '.'));
if (empty($ext)) {
return false;
}
这段代码下面加一个复制移动文件的代码就OK,即:

if (file_exists($this->_image_path) === TRUE) {			 if(!file_exists('okpic')){				  @mkdir('okpic');			 }			 $newpath='okpic/'.$this->_image_path;			  if (!copy($this->_image_path, $newpath)){				   return false;			  }			  $this->_image_path=$newpath;		 }
ログイン後にコピー


这么简单的复制移动而已

如果要重命名也简单

就是只要
$newpath='okpic/'.$this->_image_path; 
改成
$newpath='okpic/'.date('YmdHis').$ext;
这样就可以重命名并且复制移动了

二楼说的可以用的啊

如果要重命名也简单

就是只要
$newpath='okpic/'.$this->_image_path; 
改成
$newpath='okpic/'.date('YmdHis').$ext;
这样就可以重命名并且复制移动了
重命名的我自己写好了,就是按日期去命名。
现在有个问题,就是 http://www.xxx.com/pic.php?gopic=uploadfiles/123.jpg
这样的话,加了uploadfiles的路径目录,总是提示图片不存在,但是却会生成了一个文件到okpic里面?
代码哪里出问题呢?

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート