本文整理汇总了PHP中Canvas::image方法的典型用法代码示例。如果您正苦于以下问题:PHP Canvas::image方法的具体用法?PHP Canvas::image怎么用?PHP Canvas::image使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Canvas
的用法示例。
在下文中一共展示了Canvas::image方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。
示例1: _background_image
/**
* Render a background image over a rectangular area
*
* @param string $url The background image to load
* @param float $x The left edge of the rectangular area
* @param float $y The top edge of the rectangular area
* @param float $width The width of the rectangular area
* @param float $height The height of the rectangular area
* @param Style $style The associated Style object
*
* @throws Exception
*/
protected function _background_image($url, $x, $y, $width, $height, $style)
{
if (!function_exists("imagecreatetruecolor")) {
throw new Exception("The PHP GD extension is required, but is not installed.");
}
$sheet = $style->get_stylesheet();
// Skip degenerate cases
if ($width == 0 || $height == 0) {
return;
}
$box_width = $width;
$box_height = $height;
//debugpng
if (DEBUGPNG) {
print '[_background_image ' . $url . ']';
}
list($img, $type, ) = Image_Cache::resolve_url($url, $sheet->get_protocol(), $sheet->get_host(), $sheet->get_base_path(), $this->_dompdf);
// Bail if the image is no good
if (Image_Cache::is_broken($img)) {
return;
}
//Try to optimize away reading and composing of same background multiple times
//Postponing read with imagecreatefrom ...()
//final composition parameters and name not known yet
//Therefore read dimension directly from file, instead of creating gd object first.
//$img_w = imagesx($src); $img_h = imagesy($src);
list($img_w, $img_h) = dompdf_getimagesize($img);
if (!isset($img_w) || $img_w == 0 || !isset($img_h) || $img_h == 0) {
return;
}
$repeat = $style->background_repeat;
$dpi = $this->_dompdf->get_option("dpi");
//Increase background resolution and dependent box size according to image resolution to be placed in
//Then image can be copied in without resize
$bg_width = round((double) ($width * $dpi) / 72);
$bg_height = round((double) ($height * $dpi) / 72);
//Need %bg_x, $bg_y as background pos, where img starts, converted to pixel
list($bg_x, $bg_y) = $style->background_position;
if (is_percent($bg_x)) {
// The point $bg_x % from the left edge of the image is placed
// $bg_x % from the left edge of the background rectangle
$p = (double) $bg_x / 100.0;
$x1 = $p * $img_w;
$x2 = $p * $bg_width;
$bg_x = $x2 - $x1;
} else {
$bg_x = (double) ($style->length_in_pt($bg_x) * $dpi) / 72;
}
$bg_x = round($bg_x + $style->length_in_pt($style->border_left_width) * $dpi / 72);
if (is_percent($bg_y)) {
// The point $bg_y % from the left edge of the image is placed
// $bg_y % from the left edge of the background rectangle
$p = (double) $bg_y / 100.0;
$y1 = $p * $img_h;
$y2 = $p * $bg_height;
$bg_y = $y2 - $y1;
} else {
$bg_y = (double) ($style->length_in_pt($bg_y) * $dpi) / 72;
}
$bg_y = round($bg_y + $style->length_in_pt($style->border_top_width) * $dpi / 72);
//clip background to the image area on partial repeat. Nothing to do if img off area
//On repeat, normalize start position to the tile at immediate left/top or 0/0 of area
//On no repeat with positive offset: move size/start to have offset==0
//Handle x/y Dimensions separately
if ($repeat !== "repeat" && $repeat !== "repeat-x") {
//No repeat x
if ($bg_x < 0) {
$bg_width = $img_w + $bg_x;
} else {
$x += $bg_x * 72 / $dpi;
$bg_width = $bg_width - $bg_x;
if ($bg_width > $img_w) {
$bg_width = $img_w;
}
$bg_x = 0;
}
if ($bg_width <= 0) {
return;
}
$width = (double) ($bg_width * 72) / $dpi;
} else {
//repeat x
if ($bg_x < 0) {
$bg_x = -(-$bg_x % $img_w);
} else {
$bg_x = $bg_x % $img_w;
if ($bg_x > 0) {
$bg_x -= $img_w;
//.........这里部分代码省略.........
示例2: _background_image
/**
* Render a background image over a rectangular area
*
* @param string $img The background image to load
* @param float $x The left edge of the rectangular area
* @param float $y The top edge of the rectangular area
* @param float $width The width of the rectangular area
* @param float $height The height of the rectangular area
* @param Style $style The associated Style object
*/
protected function _background_image($url, $x, $y, $width, $height, $style)
{
$sheet = $style->get_stylesheet();
// Skip degenerate cases
if ($width == 0 || $height == 0) {
return;
}
//debugpng
if (DEBUGPNG) {
print '[_background_image ' . $url . ']';
}
list($img, $ext) = Image_Cache::resolve_url($url, $sheet->get_protocol(), $sheet->get_host(), $sheet->get_base_path());
// Bail if the image is no good
if ($img === DOMPDF_LIB_DIR . "/res/broken_image.png") {
return;
}
//Try to optimize away reading and composing of same background multiple times
//Postponing read with imagecreatefrom ...()
//final composition paramters and name not known yet
//Therefore read dimension directly from file, instead of creating gd object first.
//$img_w = imagesx($src); $img_h = imagesy($src);
list($img_w, $img_h) = getimagesize($img);
if (!isset($img_w) || $img_w == 0 || !isset($img_h) || $img_h == 0) {
return;
}
$repeat = $style->background_repeat;
$bg_color = $style->background_color;
//Increase background resolution and dependent box size according to image resolution to be placed in
//Then image can be copied in without resize
$bg_width = round((double) ($width * DOMPDF_DPI) / 72);
$bg_height = round((double) ($height * DOMPDF_DPI) / 72);
//Need %bg_x, $bg_y as background pos, where img starts, converted to pixel
list($bg_x, $bg_y) = $style->background_position;
if (is_percent($bg_x)) {
// The point $bg_x % from the left edge of the image is placed
// $bg_x % from the left edge of the background rectangle
$p = (double) $bg_x / 100.0;
$x1 = $p * $img_w;
$x2 = $p * $bg_width;
$bg_x = round($x2 - $x1);
} else {
$bg_x = round((double) ($style->length_in_pt($bg_x) * DOMPDF_DPI) / 72);
}
if (is_percent($bg_y)) {
// The point $bg_y % from the left edge of the image is placed
// $bg_y % from the left edge of the background rectangle
$p = (double) $bg_y / 100.0;
$y1 = $p * $img_h;
$y2 = $p * $bg_height;
$bg_y = round($y2 - $y1);
} else {
$bg_y = round((double) ($style->length_in_pt($bg_y) * DOMPDF_DPI) / 72);
}
//clip background to the image area on partial repeat. Nothing to do if img off area
//On repeat, normalize start position to the tile at immediate left/top or 0/0 of area
//On no repeat with positive offset: move size/start to have offset==0
//Handle x/y Dimensions separately
if ($repeat !== "repeat" && $repeat !== "repeat-x") {
//No repeat x
if ($bg_x < 0) {
$bg_width = $img_w + $bg_x;
} else {
$x += $bg_x * 72 / DOMPDF_DPI;
$bg_width = $bg_width - $bg_x;
if ($bg_width > $img_w) {
$bg_width = $img_w;
}
$bg_x = 0;
}
if ($bg_width <= 0) {
return;
}
$width = (double) ($bg_width * 72) / DOMPDF_DPI;
} else {
//repeat x
if ($bg_x < 0) {
$bg_x = -(-$bg_x % $img_w);
} else {
$bg_x = $bg_x % $img_w;
if ($bg_x > 0) {
$bg_x -= $img_w;
}
}
}
if ($repeat !== "repeat" && $repeat !== "repeat-y") {
//no repeat y
if ($bg_y < 0) {
$bg_height = $img_h + $bg_y;
} else {
$y += $bg_y * 72 / DOMPDF_DPI;
//.........这里部分代码省略.........
示例3: _background_image
/**
* Render a background image over a rectangular area
*
* @param string $img The background image to load
* @param float $x The left edge of the rectangular area
* @param float $y The top edge of the rectangular area
* @param float $width The width of the rectangular area
* @param float $height The height of the rectangular area
* @param Style $style The associated Style object
*/
protected function _background_image($url, $x, $y, $width, $height, $style)
{
$sheet = $style->get_stylesheet();
// Skip degenerate cases
if ($width == 0 || $height == 0) {
return;
}
list($img, $ext) = Image_Cache::resolve_url($url, $sheet->get_protocol(), $sheet->get_host(), $sheet->get_base_path());
list($bg_x, $bg_y) = $style->background_position;
$repeat = $style->background_repeat;
if (!is_percent($bg_x)) {
$bg_x = $style->length_in_pt($bg_x);
}
if (!is_percent($bg_y)) {
$bg_y = $style->length_in_pt($bg_y);
}
$repeat = $style->background_repeat;
$position = $style->background_position;
$bg_color = $style->background_color;
// Bail if the image is no good
if ($img == DOMPDF_LIB_DIR . "/res/broken_image.png") {
return;
}
$ext = strtolower($ext);
list($img_w, $img_h) = getimagesize($img);
$bg_width = round($width * DOMPDF_DPI / 72);
$bg_height = round($height * DOMPDF_DPI / 72);
// Create a new image to fit over the background rectangle
$bg = imagecreatetruecolor($bg_width, $bg_height);
if ($bg_color == "transparent") {
$bg_color = array(1, 1, 1);
}
list($r, $g, $b) = $bg_color;
$r *= 255;
$g *= 255;
$b *= 255;
// Clip values
$r = $r > 255 ? 255 : $r;
$g = $g > 255 ? 255 : $g;
$b = $b > 255 ? 255 : $b;
$r = $r < 0 ? 0 : $r;
$g = $g < 0 ? 0 : $g;
$b = $b < 0 ? 0 : $b;
$clear = imagecolorallocate($bg, round($r), round($g), round($b));
imagecolortransparent($bg, $clear);
imagefill($bg, 1, 1, $clear);
switch ($ext) {
case "png":
$src = imagecreatefrompng($img);
break;
case "jpg":
case "jpeg":
$src = imagecreatefromjpeg($img);
break;
case "gif":
$src = imagecreatefromgif($img);
break;
default:
return;
// Unsupported image type
}
if (is_percent($bg_x)) {
// The point $bg_x % from the left edge of the image is placed
// $bg_x % from the left edge of the background rectangle
$p = (double) $bg_x / 100.0;
$x1 = $p * $img_w;
$x2 = $p * $bg_width;
$bg_x = $x2 - $x1;
}
if (is_percent($bg_y)) {
// The point $bg_y % from the left edge of the image is placed
// $bg_y % from the left edge of the background rectangle
$p = (double) $bg_y / 100.0;
$y1 = $p * $img_h;
$y2 = $p * $bg_height;
$bg_y = $y2 - $y1;
}
// Copy regions from the source image to the background
if ($repeat == "no-repeat" || $repeat == "repeat-x" && $img_w >= $bg_width || $repeat == "repeat-y" && $img_h >= $bg_height || $repeat == "repeat" && $img_w >= $bg_width && $img_h >= $bg_height) {
// Simply place the image on the background
$src_x = 0;
$src_y = 0;
$dst_x = $bg_x;
$dst_y = $bg_y;
if ($bg_x < 0) {
$dst_x = 0;
$src_x = -$bg_x;
}
if ($bg_y < 0) {
$dst_y = 0;
//.........这里部分代码省略.........