imagecreatefromstring()有时会返回损坏的图像

时间:2019-02-12 14:01:39

标签: php post base64

我目前为同事编写的“ REST API”存在一些问题。 我们有一个用于上传图像的应用程序。为了将这些图像上传到Web服务器上,我创建了一个文件,该文件以BASE64编码的图像处理POST请求。

$request = http_build_query($_POST);
$size = strlen($request);
sc_log_add("imageupload","Size: $size"); //creates Log entry in Scriptcase


ini_set('display_errors', 'Off');
if(isset($_POST['image'])&&isset($_POST['path'])){

  $path = $_POST['path'];
  sc_log_add("imageupload","Datei: ".$path);
  $_POST['image'] = str_replace(" ","+",$_POST['image']);
  $exif = @exif_read_data('data://image/jpeg;base64,' . substr($_POST['image'], 0, 30000));
  $orientation = ($exif)?$exif['Orientation']:1;
  sc_log_add("imageupload","Orientation: $orientation");


  $img = imagecreatefromstring(base64_decode($_POST['image']));
  if($img != false){

    //Create folder if not exists
    $ordner = strstr($path, '/', true);
    $mkdir = execute('../files','mkdir -p '.$ordner);


    //Turn images based on orientation
    if($orientation==3){$deg=180;} else if($orientation==6){$deg=270;} else if($orientation==8){$deg=90;} else {$deg = 0;}
    $img = imagerotate($img, $deg, 0);  
    sc_log_add("imageupload","Image turned by $deg degrees");

    //Resize image
    $currwidth = imagesx($img);
    if($currwidth>1200){
        $img = imagescale ($img, 1200);
    }

    //Save image
    imagejpeg($img, '../files/'.$path);

    if(file_exists("../files/".$path)){ //Checks if file exists
        $output= "11-OKAY";
        sc_log_add("imageupload","11-OKAY");

    } else {
        $output= "17-File not generated: ".$fileexists." path:".$path;
        sc_log_add("imageupload","17-File not generated");
    }

} else {

    $output= "23-Image Creation Error"; 
    sc_log_add("imageupload","23-Image Creation Error");

}

} else {    

$output= "1 - Missing Parameters";
$empty = (!isset($_POST['image']))?"Image empty":"";
$empty .= (!isset($_POST['path']))?"- path empty":"";
sc_log_add("imageupload","1 - Missing Parameters - ".$empty);

}

echo "##IUSTART##".$output."##IUEND##";

此脚本可能在95%的时间内都能正常工作,但有时会出现问题。与其他设备相比,我在某些设备上遇到问题的频率也更高。

有什么建议为什么会发生,我(或在应用程序上发送请求的同事)可能还是应该更改?

0 个答案:

没有答案