Imagick无法在php CodeIgniter中工作

时间:2018-07-23 22:25:03

标签: php codeigniter imagick

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可以得到以下结果:

�PNGIHDR2���gAMA���a cHRMz&�����u0�`:�p��Q<��PLTE������������������ _޾׮ժӣ͛ÐÐÐÐÐ{{����_ _ _ _ _ _ _ ��w{�sw�vx����W[TXTXMQ�|��HL�@D�dg�rw�EI�����9>�quos�38�� ��������CCC���yyy������TTT���)))))��&&&&nnn������;;; mp.`iii ���������YYY???di�BbKGD�HpHYs���+tIME�7��/%5IDATx��ic�ӆ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中工作?

1 个答案:

答案 0 :(得分: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,您将获得文本而不是图像。只是不要使用“ echo”返回响应并添加正确的标题。 https://www.codeigniter.com/userguide3/libraries/output.html

您的代码应返回二进制图像文件。因此,您无法用任何东西包围它。 如果它在控制器的动作之内,则此动作应仅返回具有正确标题的该图像,而不会返回其他任何图像。而且它不应该在视野中。