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