Blame | Letzte Änderung | Log anzeigen | RSS feed
<?phprequire_once(HTML2PS_DIR.'ps.image.encoder.stream.inc.php');/*** Deprecated. Big. Slow. Causes /limitcheck Ghostcript error on big images. Use* another encoder.* @author Konstantin Bournayev* @version 1.0* @updated 24-ÿíâ-2006 21:18:30*/class PSImageEncoderSimple extends PSImageEncoderStream {function PSImageEncoderSimple() {}function auto($psdata, $src_img, &$size_x, &$size_y, &$tcolor, &$image, &$mask) {if (imagecolortransparent($src_img) == -1) {$id = $this->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 pixelif (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;}}?>