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
如何将 imagick 扩展添加到 CodeIgniter(CI)(如果这是问题所在),以便它可以在 CI 中工作?
我认为您的解决方法可能是"die();" 回声()之后的函数;
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),然后发送默认标头,这些标头是文本/html,您将获得文本而不是图像。只是不要使用"echo"返回响应并添加正确的标头。https://www.codeigniter.com/userguide3/libraries/output.html
代码应返回二进制图像文件。所以你不能用任何东西包围它。 如果它位于控制器的操作内,则此操作应仅返回具有正确标头的此图像,而不返回任何其他图像。它不应该出现在视野中。