2015-11-07 84 views
2

我想從我的服務器中的位置讀取圖像,然後畫上線,然後在位置覆蓋的圖像。 繪製圖像的形狀和它保存在PHP

我的代碼如下:

function drawShapes($src_path, $json) 
{  
    echo "---inside draw Sharpes-------"; 
    $x1= $json['x1']; 
    $y1= $json['y1']; 
    $x2= $json['x2']; 
    $y2= $json['y2']; 
    $x3= $json['x3']; 
    $y3= $json['y3']; 
    $x4= $json['x4']; 
    $y4= $json['y4']; 

    $type = exif_imagetype($src_path); 
    $allowedTypes = array( 
     1, // [] gif 
     2, // [] jpg 
     3, // [] png 
    ); 
    if (!in_array($type, $allowedTypes)) { 
     return false; 
    } 
    switch ($type) { 
     case 1 : 
      $im = imageCreateFromGif($src_path); 
     break; 
     case 2 :  
      $im = imageCreateFromJpeg($src_path);    
     break; 
     case 3 : 
      $im = imageCreateFromPng($src_path); 
     break; 
    } 

    if (!$im) 
     return false; 

    imagesetthickness($im, 5); 
    $color = imagecolorallocate($im, 255, 255, 255); 
    echo $color; 

    imageline($im, $x1, $y1, $x2, $y2, $color); 
    imageline($im, $x2, $y2, $x3, $y3, $color); 
    imageline($im, $x3, $y3, $x4, $y4, $color); 
    imageline($im, $x4, $y4, $x1, $y1, $color); 

    header("Content-type: image/jpeg"); 
    imagejpeg($im,$src_path); 
    imagedestroy($im); 
} 

這裏$ src_path = 「上傳/ case.jpg」 - 上傳是我的解決方案& case.jpg一個文件夾裏面是圖像文件名。 但我收到圖像丟失圖標作爲輸出。我做錯了什麼?

如何解決呢?謝謝。

回答

1

您發送頭之前,您迴盪數據。

如果你想覆蓋的位置的圖像,然後在瀏覽器中顯示它,也許你可以用這個調整工作:

<?php 
function drawShapes($src_path, $json) 
{ 
    //echo "---inside draw Sharpes-------"; 
    $x1= $json['x1']; 
    $y1= $json['y1']; 
    $x2= $json['x2']; 
    $y2= $json['y2']; 
    $x3= $json['x3']; 
    $y3= $json['y3']; 
    $x4= $json['x4']; 
    $y4= $json['y4']; 

    $type = exif_imagetype($src_path); 
    $allowedTypes = array(
     1, // [] gif 
     2, // [] jpg 
     3, // [] png 
    ); 
    if (!in_array($type, $allowedTypes)) { 
     return false; 
    } 
    switch ($type) { 
     case 1 : 
      $im = imageCreateFromGif($src_path); 
      break; 
     case 2 : 
      $im = imageCreateFromJpeg($src_path); 
      break; 
     case 3 : 
      $im = imageCreateFromPng($src_path); 
      break; 
    } 

    if (!$im) 
     return false; 

    imagesetthickness($im, 5); 
    $color = imagecolorallocate($im, 255, 255, 255); 
    //echo $color; 

    imageline($im, $x1, $y1, $x2, $y2, $color); 
    imageline($im, $x2, $y2, $x3, $y3, $color); 
    imageline($im, $x3, $y3, $x4, $y4, $color); 
    imageline($im, $x4, $y4, $x1, $y1, $color); 

    imagejpeg($im,$src_path); 
    imagedestroy($im); 

    $fp = fopen($src_path, 'rb'); 
    header("Content-Type: image/jpeg"); 
    header("Content-Length: " . filesize($src_path)); 
    fpassthru($fp); 
    exit; 
} 
+0

感謝很多:)它的工作。我想重定向到另一個php文件,它應該在img標籤中顯示新圖像。所以我使用了代碼session_start(); $ _SESSION ['url'] = $ url_path; header(「Location:Result.php」); - 「退出」後我粘貼了這段代碼 - 但是我將圖像丟失圖標作爲輸出。它以前獨立工作。 – user3354361

+0

它給出警告:警告:session_start():無法發送會話緩存限制器 - 已發送頭文件 – user3354361

+0

將此代碼添加到您的Result.php:'session_start(); $ src_path = $ _SESSION ['url']; $ fp =的fopen($ src_path, 'RB');頭部( 「內容類型:image/JPEG」);標題( 「內容長度:」 文件大小($ src_path)); fpassthru($ FP);出口;' 然後,在你的函數drawShapes替換此代碼: '$計劃生育=的fopen($ src_path, 'RB');標題(「Content-Type:image/jpeg」); header(「Content-Length:」。filesize($ src_path)); fpassthru($ FP);出口;' 利用該: '在session_start(); $ _SESSION ['url'] = $ src_path;標題(「Location:Result.php」);' –