Imagick не работает внутри php CodeIgniter

Расширение Imagick отлично работает с простым кодом PHP, но не внутри CodeIgniter. В чем может быть возможная проблема, любезное руководство?

Я пробовал код ColorizeImage

function colorizeImage($imagePath, $color, $opacity) {
$imagick = new \Imagick(realpath($imagePath));
$opacity = $opacity / 255.0;
$opacityColor = new \ImagickPixel("rgba(0, 0, 0, $opacity)");
$imagick->colorizeImage($color, $opacityColor);
header("Content-Type: image/jpg");
echo $imagick->getImageBlob();
}
echo colorizeImage('D:/download.png', 'green','50');

Просмотр страницы:

      <body>
      <label>Input Image</label>
      <form method = "post" id = "upload_form" enctype = "multipart/form-data">
      <input type='file' name = "userfile" size = "20" onchange = "readURL(this);"/>
      </div>
      <label>Orignal Image</label><br>
      <img id = "blah" src = "#" alt = "" />
      <label>Colorized Image </label>
      <div id = "result">
      </div>
    </div>
      <input type = "submit" name = "upload" id = "upload" value = "Apply" class = "btn btn-info" />
      </form>   
<script>
  $(document).ready(function(){  
  $('#upload_form').on('submit', function(e){  
       e.preventDefault();  
       if ($('#userfile').val() == '')  
       {  
            alert("Please Select the File");  
       }  
       else  
       {  
            $.ajax({  
                 url:"<?php echo base_url(); ?>Equalize/equalize_image",   
                 //base_url() = http://localhost/tutorial/codeigniter  
                 method:"POST",  
                 data:new FormData(this),  
                 contentType: false,  
                 cache: false,  
                 processData:false,  
                 success:function(data)  
                 {  
                      $('#result').html(data);



                 }  
            });  
       }  
       });  
    });  
  </script>
  </body>

без CI: дает отличный результат, но с CI дает следующий результат:

�PNG IHDR2����gAMA���a cHRMz & �����u0�`: �p��Q <��PLTE������������������ �޾� ٱ� ׮� ժ� ӣ�͛�ǖ�Ð�������� {����tx�pt����lp�hl�cg�y} � [_��� �w {�sw�vx����W [�TX�MQ� | ����HL� @ D�dg�rw�EI����9> �qu�os�38��� �� ����CCC���yyy������TTT���))) ��� &&& ���nnn������ ;; mp�```iii����� ػ����� YYY ??? di���BbKGD�H pHYs��� + tIME�7�� /% 5IDATx����: ӆm6� = 6�H ����R�4m�4 } ���Ϋ�l���-; � $} 3�҂�.�n�F�� | ؇} ؇} Xf���F, �������N��g> � ���T����LB�Q + ��̬B�J�V�U��? ��N ����j�� ^ t��A��� ܈�� F� ٬� zN� ��� "N% $ @ ��! S�5��l676 땭

Как добавить расширение imagick в CodeIgniter (CI) (если это проблема), чтобы оно могло работать в CI?

Не отправляете заголовки изображений? Не имеет ничего общего с «расширением», его кодовым уровнем. Заголовок / выходной буфер ...

ficuscr 24.07.2018 00:27

как предоставить заголовки изображений? Я думал, что воображать не нужно?

mareena 24.07.2018 00:29

Что ж вы повторяете образ, то бинарная правда? Нет, imagick не отправляет заголовки в веб-браузер. - getimageBlob() ... «Возвращает строку, содержащую изображение.». Вы отправляете это в браузер, а не пытаетесь обновить файл? В таком случае используйте: header('Content-Type: image/png');

ficuscr 24.07.2018 00:29

Опять же, результат такой же. Приведенный выше код дает этот вывод только внутри CodeIgniter.

mareena 24.07.2018 00:33

codeigniter - это просто фреймворк php, он не изменяет сторонние или собственные классы / функции. если этот код работает вне CI, единственное объяснение - ошибка пользователя.

Alex 24.07.2018 00:42

Я спросил того же, в чем может быть ошибка, из-за которой эта программа не работает внутри CI?

mareena 24.07.2018 00:46

@Alex, пожалуйста, ответьте на этот вопрос: stackoverflow.com/questions/51507898/…

mareena 25.07.2018 01:27

похоже на ту же проблему, что и раньше, и она была исправлена

Alex 25.07.2018 01:30

но теперь изображение выровнено и загружено, но не отображается, исправьте?

mareena 25.07.2018 01:33
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
9
1 048
1

Ответы 1

Я думаю, ваш обходной путь может быть "die ();" функция после echo ();

    function colorizeImage($imagePath, $color, $opacity) {
$imagick = new \Imagick(realpath($imagePath));
$opacity = $opacity / 255.0;
$opacityColor = new \ImagickPixel("rgba(0, 0, 0, $opacity)");
$imagick->colorizeImage($color, $opacityColor);
header("Content-Type: image/jpg");
echo $imagick->getImageBlob();
}
echo colorizeImage('D:/download.png', 'green','50');
die;

Но лучше отправлять заголовки с помощью CodeIgniter.

Я думаю, что CodeIgniter использует буфер (ob_start), а затем отправляет заголовки по умолчанию, которые являются text / html, и вы получаете текст вместо изображения. Только не используйте «эхо», верните ответ и добавьте правильные заголовки. https://www.codeigniter.com/userguide3/libraries/output.html

Ваш код должен возвращать двоичный файл изображения. Так что его ничем нельзя окружить. Если он находится внутри действия контроллера, то это действие должно возвращать только это изображение с правильными заголовками и ничего больше. И этого не должно быть в виду.

Пробовал все, проблема в том, что когда я получаю данные на странице просмотра при действии щелчка, он показывает мне текст вместо страницы. Но когда я запускаю страницу контроллера, как «Colorize / colorize_image», она показывает мне правильный вывод, то есть раскрашенное изображение. Теперь в чем проблема? Я отредактировал код и добавил текст страницы просмотра.

mareena 24.07.2018 16:10

Другие вопросы по теме