CodeIgniter 图片水印 returns 使用动态输出时的空白图片
CodeIgniter image watermark returns blank image when using dynamic output
我正在使用 jquery 到 post 数据到控制器功能,该功能为位于服务器上的图像添加水印并动态地 post 返回。水印功能在我不使用动态输出时有效,但当我这样做时只是 returns 周围有 1 像素灰色边框的空白图像。
返回的图像命名正确,并且应用了正确的图像类型 headers。这是网络检查器返回的 gobble-de-gook 的第一行:
ÿØÿàJFIFÿþ;CREATOR: gd-jpeg v1.0 (using IJG JPEG v90), quality = 90
如果有任何替代方法可以实现此目的,我们将不胜感激,为此已经花费了数天时间,但收效甚微。如果可能的话,我宁愿让服务器上的图像保持原样。
Java:
$('#body').on('click', '#get_file', function(ev)
{
ev.preventDefault();
var type = 'file';
var uid = $('#file_select').val();
var v1 = retD['res'][0].v1;
var v2 = retD['res'][0].v2;
var v3 = retD['res'][0].v3;
var v4 = retD['res'][0].v4;
$.ajax({
type: 'POST',
url: '<?php echo site_url("Home_controller/drawInfo") ?>',
data: {v1:v1, v2:v2, v3:v3, v4:v4},
dataType: 'html',
success: function(img)
{
$("#i").attr("src", img);
}
});
});
控制器:
function drawInfo()
{
$v1 = $_POST['v1'];
$v2 = $_POST['v2'];
$v3 = $_POST['v3'];
$v4 = $_POST['v4'];
$config['image_library'] = 'gd2';
$config['source_image'] = './img/Test_image.jpg';
$config['wm_text'] = 'v1: ' . $v1 . ' v2: ' . $v2 . ' v3: ' . $v3 . ' v4: ' . $v4;
$config['wm_type'] = 'text';
$config['dynamic_output'] = true;
$config['wm_font_color'] = 'ff0000';
$config['wm_font_path'] = './system/fonts/texb.ttf';
$config['wm_vrt_alignment'] = 'bottom';
$config['wm_hor_alignment'] = 'center';
$config['wm_padding'] = '20';
$this->image_lib->initialize($config);
if(!$this->image_lib->watermark())
{
echo $this->image_lib->display_errors();
}
}
您从控制器 return 返回图像二进制数据,但是在 Javascript 中您想将其用作 img 元素的 'src' 属性。
在控制器中,您应该return使用新生成图像的 src。
设置路径并为将生成图像的文件夹设置正确的权限时请小心(它应该可以被 apache 写入)。
控制器:
function drawInfo()
{
$return = array(
'src' => '',
'error' => '',
);
$v1 = $_POST['v1'];
$v2 = $_POST['v2'];
$v3 = $_POST['v3'];
$v4 = $_POST['v4'];
$config['image_library'] = 'gd2';
// set image path
$config['source_image'] = FCPATH . 'img/Test_image.jpg';
// this image will be watermarked (path should be writable by apache!!!)
$config['new_image'] = FCPATH . 'img/Test_image_new.jpg';
$config['wm_text'] = 'v1: ' . $v1 . ' v2: ' . $v2 . ' v3: ' . $v3 . ' v4: ' . $v4;
$config['wm_type'] = 'text';
// to false to save image to file instead of print it (you can leave this setting because the false is the default value)
$config['dynamic_output'] = false;
$config['wm_font_color'] = 'ff0000';
// set the proper path!!
$config['wm_font_path'] = FCPATH . 'system/fonts/texb.ttf';
$config['wm_vrt_alignment'] = 'bottom';
$config['wm_hor_alignment'] = 'center';
$config['wm_padding'] = '20';
$this->image_lib->initialize($config);
if(!$this->image_lib->watermark())
{
$return['error'] = $this->image_lib->display_errors();
}
else
{
// generate the URL of the new watermarked image (modify to your needs)
$return['src'] = base_url() .'/'. $config['new_image'];
}
echo json_encode($return);
}
JavaScript:
$.ajax({
type: 'POST',
url: '<?php echo site_url("Home_controller/drawInfo") ?>',
data: {v1:v1, v2:v2, v3:v3, v4:v4},
dataType: 'html',
success: function(response)
{
if(response.error)
{
alert(response.error);
}
else
{
$("#i").attr("src", response.src);
}
}
});
我正在使用 jquery 到 post 数据到控制器功能,该功能为位于服务器上的图像添加水印并动态地 post 返回。水印功能在我不使用动态输出时有效,但当我这样做时只是 returns 周围有 1 像素灰色边框的空白图像。
返回的图像命名正确,并且应用了正确的图像类型 headers。这是网络检查器返回的 gobble-de-gook 的第一行:
ÿØÿàJFIFÿþ;CREATOR: gd-jpeg v1.0 (using IJG JPEG v90), quality = 90
如果有任何替代方法可以实现此目的,我们将不胜感激,为此已经花费了数天时间,但收效甚微。如果可能的话,我宁愿让服务器上的图像保持原样。
Java:
$('#body').on('click', '#get_file', function(ev)
{
ev.preventDefault();
var type = 'file';
var uid = $('#file_select').val();
var v1 = retD['res'][0].v1;
var v2 = retD['res'][0].v2;
var v3 = retD['res'][0].v3;
var v4 = retD['res'][0].v4;
$.ajax({
type: 'POST',
url: '<?php echo site_url("Home_controller/drawInfo") ?>',
data: {v1:v1, v2:v2, v3:v3, v4:v4},
dataType: 'html',
success: function(img)
{
$("#i").attr("src", img);
}
});
});
控制器:
function drawInfo()
{
$v1 = $_POST['v1'];
$v2 = $_POST['v2'];
$v3 = $_POST['v3'];
$v4 = $_POST['v4'];
$config['image_library'] = 'gd2';
$config['source_image'] = './img/Test_image.jpg';
$config['wm_text'] = 'v1: ' . $v1 . ' v2: ' . $v2 . ' v3: ' . $v3 . ' v4: ' . $v4;
$config['wm_type'] = 'text';
$config['dynamic_output'] = true;
$config['wm_font_color'] = 'ff0000';
$config['wm_font_path'] = './system/fonts/texb.ttf';
$config['wm_vrt_alignment'] = 'bottom';
$config['wm_hor_alignment'] = 'center';
$config['wm_padding'] = '20';
$this->image_lib->initialize($config);
if(!$this->image_lib->watermark())
{
echo $this->image_lib->display_errors();
}
}
您从控制器 return 返回图像二进制数据,但是在 Javascript 中您想将其用作 img 元素的 'src' 属性。
在控制器中,您应该return使用新生成图像的 src。
设置路径并为将生成图像的文件夹设置正确的权限时请小心(它应该可以被 apache 写入)。
控制器:
function drawInfo()
{
$return = array(
'src' => '',
'error' => '',
);
$v1 = $_POST['v1'];
$v2 = $_POST['v2'];
$v3 = $_POST['v3'];
$v4 = $_POST['v4'];
$config['image_library'] = 'gd2';
// set image path
$config['source_image'] = FCPATH . 'img/Test_image.jpg';
// this image will be watermarked (path should be writable by apache!!!)
$config['new_image'] = FCPATH . 'img/Test_image_new.jpg';
$config['wm_text'] = 'v1: ' . $v1 . ' v2: ' . $v2 . ' v3: ' . $v3 . ' v4: ' . $v4;
$config['wm_type'] = 'text';
// to false to save image to file instead of print it (you can leave this setting because the false is the default value)
$config['dynamic_output'] = false;
$config['wm_font_color'] = 'ff0000';
// set the proper path!!
$config['wm_font_path'] = FCPATH . 'system/fonts/texb.ttf';
$config['wm_vrt_alignment'] = 'bottom';
$config['wm_hor_alignment'] = 'center';
$config['wm_padding'] = '20';
$this->image_lib->initialize($config);
if(!$this->image_lib->watermark())
{
$return['error'] = $this->image_lib->display_errors();
}
else
{
// generate the URL of the new watermarked image (modify to your needs)
$return['src'] = base_url() .'/'. $config['new_image'];
}
echo json_encode($return);
}
JavaScript:
$.ajax({
type: 'POST',
url: '<?php echo site_url("Home_controller/drawInfo") ?>',
data: {v1:v1, v2:v2, v3:v3, v4:v4},
dataType: 'html',
success: function(response)
{
if(response.error)
{
alert(response.error);
}
else
{
$("#i").attr("src", response.src);
}
}
});