0

ページ上のすべての写真を保護するために透かしシステムを使用しています。

<?php
$imagesource = $_SERVER['DOCUMENT_ROOT']."**path**".$_GET['path'];
if (!file_exists($imagesource)) die();
$filetype = strtolower(substr($imagesource,strlen($imagesource)-4,4));
if($filetype == ".gif") $image = @imagecreatefromgif($imagesource); 
if($filetype == ".jpg") $image = @imagecreatefromjpeg($imagesource); 
if($filetype == ".png") $image = @imagecreatefrompng($imagesource); 
if (empty($image)) die();
$watermark = @imagecreatefrompng('watermark_'.(imagesx($image) <= 1100 ? "port" : "lans").'.png');
$imagewidth = imagesx($image);
$imageheight = imagesy($image); 
$watermarkwidth = imagesx($watermark);
$watermarkheight = imagesy($watermark);
$startwidth = (($imagewidth - $watermarkwidth)/2);
$startheight = (($imageheight - $watermarkheight)/2);
imagecopy($image, $watermark,  $startwidth, $startheight, 0, 0, $watermarkwidth, $watermarkheight);
header("Content-type: image/jpeg");
imagejpeg($image);
imagedestroy($image);
imagedestroy($watermark);
?>

これは正常に機能しますが、このページをGoogle Chromeに読み込むと、画像が事前に読み込まれて表示されますが、Chromeがレンダリングされるとすぐに、「リソースの読み込みに失敗しました」と表示されます。ロードに失敗した場合、なぜそれを表示したのでしょうか。

とにかく、この問題を他のブラウザで再現することはできません。これも奇妙なことですが、これはスクリプトに問題がないことを示しています。

画像が小さいほど正しく表示されることに気づきましたが、19枚の画像のうち2枚が読み込まれるのは良いことです!!

これで、画像を通常どおりに表示した場合(つまり、透かしのスクリプトがない場合。「<"img"> <"/ img">」タグを使用)、これは発生しません。

しかし、別のWebサイトには透かしのスクリプトがありませんが、それでも読み込まれません。

私が持っているもう一つの質問は;

ウェブサイトの契約に適用される法律のため、元のファイルに著作権と.htaccess保護を使用する必要があります...とにかく、ユーザーが画像ソースファイルに直接アクセスできないようにします。これらのエラーはこれの結果である可能性がありますか?しかし、なぜ一部のディスプレイと他のディスプレイが表示されないのでしょうか。同じように、この問題が発生するのはGoogleChromeだけなのですか。

あなたの考えは応用されるでしょう。

PSこれは私のブラウザ情報です:

Google Chrome   19.0.1084.56 (Official Build 140965) m
OS  Windows
WebKit  536.5 (@119244)
JavaScript  V8 3.9.24.29
Flash   11,3,300,257
User Agent  Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.56 Safari/536.5

視覚的な例:

読み込み中

ロード済み

4

2 に答える 2

1

Chromeのバグのようです。私を夢中にさせていたので、base64を使用した「修正」を思いついた。透かしのスクリプトをまったく同じままにして、画像を出力しているスクリプトに入ります。

function base64_encode_image ($imagefile) {
      $filename=htmlentities($imagefile);
      $filetype = pathinfo($filename, PATHINFO_EXTENSION);
      $imgbinary = file_get_contents($filename);
      return 'data:image/' . $filetype . ';base64,' . base64_encode($imgbinary);
}

$string=base64_encode_image("http://www.domain.com.au/watermark.php?imagesrc=image1.jpg");

$imgList.="<img src=\"$string\" title=\"\">";
于 2012-06-19T01:39:19.263 に答える
0

Content-Lentgh を返さないため、問題が発生した可能性があります。

imagejpeg($image);行を次のコードに置き換える必要があり ます。

    imagejpeg($image, 'php://memory/temp.jpeg'); 
    header("Content-Length: " . filesize('php://memory/temp.jpeg'));
    $fp = fopen("php://temp/temp.jpeg", 'r');
    echo stream_get_contents($fp);
于 2012-06-21T13:52:24.107 に答える