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;
}
}
?>