【问题标题】:Imagick is not working inside php CodeIgniterImagick 在 php CodeIgniter 中不起作用
【发布时间】:2018-07-23 22:25:02
【问题描述】:

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�qu�os�38�� �������CCC���yyy������TTT��)))...&&&��nnn������;;;mp�```iii�� ����������YYY???di����BbKGD�H pHYs���+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 中工作?

【问题讨论】:

  • 不发送图片标题?与“扩展”无关,它的代码级别。标头/输出缓冲区...
  • 如何提供图片标题?我认为imagick不需要?
  • 嗯,你是在呼应一个图像,那么二进制是真的吗?不,imagick 不会将标头发送到 Web 浏览器。 - getimageBlob()... "返回一个包含图像的字符串。"。您将其发送到浏览器,而不是尝试更新文件?如果是这样,请使用:header('Content-Type: image/png');
  • 再次给出相同的输出。上面提供的代码仅在 CodeIgniter 中提供此输出。
  • codeigniter 只是一个 php 框架,它不会修改第三方或原生类/函数。如果此代码在 CI 之外工作,那么唯一的解释是用户错误

标签: php codeigniter imagick


【解决方案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

您的代码应该返回二进制图像文件。所以你不能用任何东西包围它。 如果它在控制器的动作中,那么这个动作应该只返回这个带有正确标题的图像,而不是其他任何东西。它不应该出现在视野中。

【讨论】:

  • 什么都试过了,问题是当我通过点击操作在视图页面中获取数据时,它显示的是文本而不是页面。但是,当我像“Colorize/colorize_image”一样运行控制器页面时,它会向我显示正确的输出,即彩色图像。现在有什么问题?我已经编辑了代码并添加了视图页面文本。
猜你喜欢
  • 2013-03-26
  • 1970-01-01
  • 1970-01-01
  • 2013-05-16
  • 2019-01-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多