Функция imagecreatefromstring () иногда возвращает поврежденные изображения - PullRequest
0 голосов
/ 12 февраля 2019

У меня в настоящее время есть некоторые проблемы с "REST API", который я написал для коллеги.У нас есть приложение, которое используется для загрузки изображений.Чтобы загрузить эти изображения на веб-сервер, я создал файл, который обрабатывает запрос POST с изображением в кодировке base64.

$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% случаев, но иногда имеет проблемы.Я также получаю проблемы на некоторых устройствах чаще, чем на других.

Любое предложение ПОЧЕМУ это происходит и что я (или мой коллега, который отправляет запросы в приложение) может или должен изменить?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...