solid($psdata, $src_img->get_handle(), $size_x, $size_y, $image->get_handle(), $mask); $tcolor = 0; return $id; } else { $id = $this->transparent($psdata, $src_img->get_handle(), $size_x, $size_y, $image->get_handle(), $mask); $tcolor = 1; return $id; }; } function solid($psdata, $src_img, &$size_x, &$size_y, &$image, &$mask) { $id = $this->generate_id(); $size_x = imagesx($src_img); $size_y = imagesy($src_img); $dest_img = imagecreatetruecolor($size_x, $size_y); imagecopymerge($dest_img, $src_img, 0, 0, 0, 0, $size_x, $size_y, 100); $ps_image_data = ""; $ctr = 1; $row = 1; for ($y = 0; $y < $size_y; $y++) { for ($x = 0; $x < $size_x; $x++) { // Image pixel $rgb = ImageColorAt($dest_img, $x, $y); $r = ($rgb >> 16) & 0xFF; $g = ($rgb >> 8) & 0xFF; $b = $rgb & 0xFF; $ps_image_data .= sprintf("\\%03o\\%03o\\%03o",$r,$g,$b); // Write image rows $ctr++; if ($ctr > MAX_IMAGE_ROW_LEN || ($x + 1 == $size_x)) { $row_next = ($size_x - $x - 1 + $size_x * ($size_y - $y - 1) == 0) ? 1 : $row+1; $psdata->write("/row-{$id}-{$row} { /image-{$id}-data { row-{$id}-{$row_next} } def ({$ps_image_data}) } def\n"); $ps_image_data = ""; $ctr = 1; $row += 1; }; }; }; if ($ps_image_data) { $psdata->write("/row-{$id}-{$row} { /image-{$id}-data { row-{$id}-1 } def ({$ps_image_data}) } def\n"); }; $psdata->write("/image-{$id}-data { row-{$id}-1 } def\n"); $psdata->write("/image-{$id}-init { } def\n"); // return image and mask data references $image = "{image-{$id}-data}"; $mask = ""; return $id; } function transparent($psdata, $src_img, &$size_x, &$size_y, &$image, &$mask) { $id = $this->generate_id(); $size_x = imagesx($src_img); $size_y = imagesy($src_img); $transparent = imagecolortransparent($src_img); $dest_img = imagecreatetruecolor($size_x, $size_y); imagecopymerge($dest_img, $src_img, 0, 0, 0, 0, $size_x, $size_y, 100); $ps_image_data = ""; $ps_mask_data = 0xff; $ctr = 1; $row = 1; $handler =& CSS::get_handler(CSS_BACKGROUND_COLOR); $background_color = $handler->get_visible_background_color(); for ($y = 0; $y < $size_y; $y++) { for ($x = 0; $x < $size_x; $x++) { // Image pixel $rgb = ImageColorAt($dest_img, $x, $y); $r = ($rgb >> 16) & 0xFF; $g = ($rgb >> 8) & 0xFF; $b = $rgb & 0xFF; // Mask pixel if (ImageColorAt($src_img, $x, $y) == $transparent) { $ps_mask_data = ($ps_mask_data << 1) | 0x1; // Also, reset the image colors to the visible background to work correctly // while using 'transparency hack' $r = $background_color[0]; $g = $background_color[1]; $b = $background_color[2]; } else { $ps_mask_data = ($ps_mask_data << 1) | 0; }; $ps_image_data .= sprintf("\\%03o\\%03o\\%03o",$r,$g,$b); // Write mask and image rows $ctr++; if ($ctr > MAX_TRANSPARENT_IMAGE_ROW_LEN || ($x + 1 == $size_x)) { while ($ctr <= 8) { $ps_mask_data <<= 1; $ps_mask_data |= 1; $ctr ++; }; $ps_mask_data_str = sprintf("\\%03o",$ps_mask_data & 0xff); $row_next = ($size_x - $x - 1 + $size_x * ($size_y - $y - 1) == 0) ? 1 : $row+1; $psdata->write("/row-{$id}-{$row} { /image-{$id}-data { row-{$id}-{$row_next} } def ({$ps_image_data}) } def\n"); $psdata->write("/mrow-{$id}-{$row} { /mask-{$id}-data { mrow-{$id}-{$row_next} } def ({$ps_mask_data_str}) } def\n"); $ps_image_data = ""; $ps_mask_data = 0xff; $ctr = 1; $row += 1; }; }; }; if ($ps_image_data) { while ($ctr <= 8) { $ps_mask_data <<= 1; $ps_mask_data |= 1; $ctr ++; }; $ps_mask_data_str = sprintf("\\%03o",$ps_mask_data & 0xFF); $psdata->write("/row-{$id}-{$row} { /image-{$id}-data { row-{$id}-{$row_next} } def ({$ps_image_data}) } def\n"); $psdata->write("/mrow-{$id}-{$row} { /mask-{$id}-data { mrow-{$id}-{$row_next} } def ({$ps_mask_data_str}) } def\n"); }; $psdata->write("/image-{$id}-data { row-{$id}-1 } def\n"); $psdata->write("/mask-{$id}-data { mrow-{$id}-1 } def\n"); $psdata->write("/image-{$id}-init { } def\n"); // return image and mask data references $image = "{image-{$id}-data}"; $mask = "{mask-{$id}-data}"; return $id; } function alpha($psdata, $src_img, &$size_x, &$size_y, &$image, &$mask) { $id = $this->generate_id(); $size_x = imagesx($src_img); $size_y = imagesy($src_img); $ps_image_data = ""; $ps_mask_data = 0xff; $ctr = 1; $row = 1; for ($y = 0; $y < $size_y; $y++) { for ($x = 0; $x < $size_x; $x++) { // Mask pixel $colors = imagecolorsforindex($src_img, imagecolorat($src_img, $x, $y)); $a = $colors['alpha']; $r = $colors['red']; $g = $colors['green']; $b = $colors['blue']; $handler =& CSS::get_handler(CSS_BACKGROUND_COLOR); $bg = $handler->get_visible_background_color(); $r = (int)($r + ($bg[0] - $r)*$a/127); $g = (int)($g + ($bg[1] - $g)*$a/127); $b = (int)($b + ($bg[2] - $b)*$a/127); $ps_image_data .= sprintf("\\%03o\\%03o\\%03o",$r,$g,$b); // Write mask and image rows $ctr++; if ($ctr > MAX_IMAGE_ROW_LEN || ($x + 1 == $size_x)) { $row_next = ($size_x - $x - 1 + $size_x * ($size_y - $y - 1) == 0) ? 1 : $row+1; $psdata->write("/row-{$id}-{$row} { /image-{$id}-data { row-{$id}-{$row_next} } def ({$ps_image_data}) } def\n"); $ps_image_data = ""; $ctr = 1; $row += 1; }; }; }; if ($ps_image_data) { $psdata->write("/row-{$id}-{$row} { /image-{$id}-data { row-{$id}-{$row_next} } def ({$ps_image_data}) } def\n"); }; $psdata->write("/image-{$id}-data { row-{$id}-1 } def\n"); $psdata->write("/image-{$id}-init { } def\n"); // return image and mask data references $image = "{image-{$id}-data}"; $mask = ""; return $id; } } ?>