本文整理汇总了PHP中ImageColorsForIndex函数的典型用法代码示例。如果您正苦于以下问题:PHP ImageColorsForIndex函数的具体用法?PHP ImageColorsForIndex怎么用?PHP ImageColorsForIndex使用的例子?那么, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了ImageColorsForIndex函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。
示例1: ImageCopyBicubic
/**
*
* long description
* @global object
* @param object $dst_img
* @param object $src_img
* @param int $dst_x
* @param int $dst_y
* @param int $src_x
* @param int $src_y
* @param int $dst_w
* @param int $dst_h
* @param int $src_w
* @param int $src_h
* @return bool
* @todo Finish documenting this function
*/
function ImageCopyBicubic($dst_img, $src_img, $dst_x, $dst_y, $src_x, $src_y, $dst_w, $dst_h, $src_w, $src_h)
{
global $CFG;
if (function_exists('ImageCopyResampled') and $CFG->gdversion >= 2) {
return ImageCopyResampled($dst_img, $src_img, $dst_x, $dst_y, $src_x, $src_y, $dst_w, $dst_h, $src_w, $src_h);
}
$totalcolors = imagecolorstotal($src_img);
for ($i = 0; $i < $totalcolors; $i++) {
if ($colors = ImageColorsForIndex($src_img, $i)) {
ImageColorAllocate($dst_img, $colors['red'], $colors['green'], $colors['blue']);
}
}
$scaleX = ($src_w - 1) / $dst_w;
$scaleY = ($src_h - 1) / $dst_h;
$scaleX2 = $scaleX / 2.0;
$scaleY2 = $scaleY / 2.0;
for ($j = 0; $j < $dst_h; $j++) {
$sY = $j * $scaleY;
for ($i = 0; $i < $dst_w; $i++) {
$sX = $i * $scaleX;
$c1 = ImageColorsForIndex($src_img, ImageColorAt($src_img, (int) $sX, (int) $sY + $scaleY2));
$c2 = ImageColorsForIndex($src_img, ImageColorAt($src_img, (int) $sX, (int) $sY));
$c3 = ImageColorsForIndex($src_img, ImageColorAt($src_img, (int) $sX + $scaleX2, (int) $sY + $scaleY2));
$c4 = ImageColorsForIndex($src_img, ImageColorAt($src_img, (int) $sX + $scaleX2, (int) $sY));
$red = (int) (($c1['red'] + $c2['red'] + $c3['red'] + $c4['red']) / 4);
$green = (int) (($c1['green'] + $c2['green'] + $c3['green'] + $c4['green']) / 4);
$blue = (int) (($c1['blue'] + $c2['blue'] + $c3['blue'] + $c4['blue']) / 4);
$color = ImageColorClosest($dst_img, $red, $green, $blue);
ImageSetPixel($dst_img, $i + $dst_x, $j + $dst_y, $color);
}
}
}
示例2: image_to_text
/**
* Image to Text
*
* Takes a given system image and recreates it with a given string
* Function accepts arbitrary elements to use for markup
*
* @access public
* @param string
* @param string
* @param string
* @return string
*/
function image_to_text($data, $txt, $new_width = NULL, $new_height = NULL, $inline_element = 'span')
{
$img = imagecreatefromstring($data);
$width = imagesx($img);
$height = imagesy($img);
// add abiilty to resize on the fly
if ($new_width and $new_height) {
$new = imagecreatetruecolor($new_width, $new_height);
imagecopyresampled($new, $img, 0, 0, 0, 0, $new_width, $new_height, $width, $height);
unset($img);
$img = $new;
$width = $new_width;
$height = $new_height;
unset($new);
}
$counter = 0;
$output = "";
for ($i = 0; $i < $height; $i++) {
for ($j = 0; $j < $width; $j++) {
$counter = $counter % strlen($txt);
$cindex = ImageColorAt($img, $j, $i);
$rgb = ImageColorsForIndex($img, $cindex);
$hex = rgb2hex(array($rgb['red'], $rgb['green'], $rgb['blue']));
$output .= '<' . $inline_element . ' style="color:#' . $hex . ';">' . substr($txt, $counter, 1) . '</' . $inline_element . '>';
$counter++;
}
$output .= "<br />";
}
return $output;
}
示例3: GetPixelColor
/**
* Retourne la couleur d'un pixel dans une image
*
* @param ressource $img
* @param int $x
* @param int $y
* @return array|bool
*/
public static function GetPixelColor(&$img, $x, $y)
{
if (!is_resource($img)) {
return false;
}
return @ImageColorsForIndex($img, @ImageColorAt($img, $x, $y));
}
示例4: _antialisedSubPixel
/**
* Antialias'es the pixel around x,y with weights a,b
*
* @param int $x X point
* @param int $y Y point
* @param int $a The weight of the current color
* @param int $b The weight of the applied/wanted color
* @param mixed $color The pixel color
* @access private
*/
function _antialisedSubPixel($x, $y, $a, $b, $color)
{
$x = $this->_getX($x);
$y = $this->_getX($y);
if ($x >= 0 && $y >= 0 && $x < $this->getWidth() && $y < $this->getHeight()) {
$tempColor = ImageColorsForIndex($this->_canvas, ImageColorAt($this->_canvas, $x, $y));
$newColor[0] = min(255, round($tempColor['red'] * $a + $color['red'] * $b));
$newColor[1] = min(255, round($tempColor['green'] * $a + $color['green'] * $b));
$newColor[2] = min(255, round($tempColor['blue'] * $a + $color['blue'] * $b));
//$newColor[3] = 0;
$color = '#';
foreach ($newColor as $acolor) {
$color .= sprintf('%02s', dechex($acolor));
}
$newColor = $this->_color($color);
//,'rgb(' . $newColor[0] . ',' . $newColor[1] . ',' . $newColor[2] .')';
ImageSetPixel($this->_canvas, $x, $y, $newColor);
}
}
示例5: resize
/**
* From: https://stackoverflow.com/questions/4590441/php-thumbnail-image-resizing-with-proportions
*/
function resize(&$img, $size)
{
if (!is_numeric($size)) {
$size = explode('x', $size);
}
if (is_array($size)) {
$maxwidth = $size[0];
$maxheight = $size[1];
} else {
if ($size) {
$maxwidth = $size;
$maxheight = $size;
}
}
$width = imagesx($img);
$height = imagesy($img);
if (!ALLOW_BLOATING) {
if ($maxwidth > $width) {
$maxwidth = $width;
}
if ($maxheight > $height) {
$maxheight = $height;
}
}
if ($height > $width) {
$ratio = $maxheight / $height;
$newheight = $maxheight;
$newwidth = $width * $ratio;
} else {
$ratio = $maxwidth / $width;
$newwidth = $maxwidth;
$newheight = $height * $ratio;
}
$newimg = imagecreatetruecolor($newwidth, $newheight);
$palsize = ImageColorsTotal($img);
for ($i = 0; $i < $palsize; $i++) {
$colors = ImageColorsForIndex($img, $i);
ImageColorAllocate($newimg, $colors['red'], $colors['green'], $colors['blue']);
}
imagefill($newimg, 0, 0, IMG_COLOR_TRANSPARENT);
imagesavealpha($newimg, true);
imagealphablending($newimg, true);
imagecopyresampled($newimg, $img, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
$img = $newimg;
}
示例6: imageCopyResampledBicubic
public static function imageCopyResampledBicubic(&$dst_image, &$src_image, $dst_x, $dst_y, $src_x, $src_y, $dst_w, $dst_h, $src_w, $src_h)
{
// We should first cut the piece we are interested in from the source
$src_img = ImageCreateTrueColor($src_w, $src_h);
imagecopy($src_img, $src_image, 0, 0, $src_x, $src_y, $src_w, $src_h);
// This one is used as temporary image
$dst_img = ImageCreateTrueColor($dst_w, $dst_h);
ImagePaletteCopy($dst_img, $src_img);
$rX = $src_w / $dst_w;
$rY = $src_h / $dst_h;
$w = 0;
for ($y = 0; $y < $dst_h; $y++) {
$ow = $w;
$w = round(($y + 1) * $rY);
$t = 0;
for ($x = 0; $x < $dst_w; $x++) {
$r = $g = $b = 0;
$a = 0;
$ot = $t;
$t = round(($x + 1) * $rX);
for ($u = 0; $u < $w - $ow; $u++) {
for ($p = 0; $p < $t - $ot; $p++) {
$c = ImageColorsForIndex($src_img, ImageColorAt($src_img, $ot + $p, $ow + $u));
$r += $c['red'];
$g += $c['green'];
$b += $c['blue'];
$a++;
}
}
ImageSetPixel($dst_img, $x, $y, ImageColorClosest($dst_img, $r / $a, $g / $a, $b / $a));
}
}
// Apply the temp image over the returned image and use the destination x,y coordinates
imagecopy($dst_image, $dst_img, $dst_x, $dst_y, 0, 0, $dst_w, $dst_h);
// We should return true since ImageCopyResampled/ImageCopyResized do it
return true;
}
示例7: inputLevels
/**
* Apply input levels to input image pointer (increasing contrast)
*
* @param resource $im GDlib Image Pointer
* @param int $low The "low" value (close to 0)
* @param int $high The "high" value (close to 255)
* @return void
*/
public function inputLevels(&$im, $low, $high)
{
if ($low < $high) {
$low = MathUtility::forceIntegerInRange($low, 0, 255);
$high = MathUtility::forceIntegerInRange($high, 0, 255);
$delta = $high - $low;
$totalCols = ImageColorsTotal($im);
for ($c = 0; $c < $totalCols; $c++) {
$cols = ImageColorsForIndex($im, $c);
$cols['red'] = MathUtility::forceIntegerInRange(($cols['red'] - $low) / $delta * 255, 0, 255);
$cols['green'] = MathUtility::forceIntegerInRange(($cols['green'] - $low) / $delta * 255, 0, 255);
$cols['blue'] = MathUtility::forceIntegerInRange(($cols['blue'] - $low) / $delta * 255, 0, 255);
ImageColorSet($im, $c, $cols['red'], $cols['green'], $cols['blue']);
}
}
}
示例8: upgrade_profile_image
/**
* Given a user id this function scales and crops the user images to remove
* the one pixel black border.
*
* @global object
* @param int $id
* @param string $dir
* @return boolean
*/
function upgrade_profile_image($id, $dir = 'users')
{
global $CFG, $OUTPUT;
$im = ImageCreateFromJPEG($CFG->dataroot . '/' . $dir . '/' . $id . '/f1.jpg');
if (function_exists('ImageCreateTrueColor') and $CFG->gdversion >= 2) {
$im1 = ImageCreateTrueColor(100, 100);
$im2 = ImageCreateTrueColor(35, 35);
} else {
$im1 = ImageCreate(100, 100);
$im2 = ImageCreate(35, 35);
}
if (function_exists('ImageCopyResampled') and $CFG->gdversion >= 2) {
ImageCopyBicubic($im1, $im, 0, 0, 2, 2, 100, 100, 96, 96);
} else {
imagecopy($im1, $im, 0, 0, 0, 0, 100, 100);
$c = ImageColorsForIndex($im1, ImageColorAt($im1, 2, 2));
$color = ImageColorClosest($im1, $c['red'], $c['green'], $c['blue']);
ImageSetPixel($im1, 0, 0, $color);
$c = ImageColorsForIndex($im1, ImageColorAt($im1, 2, 97));
$color = ImageColorClosest($im1, $c['red'], $c['green'], $c['blue']);
ImageSetPixel($im1, 0, 99, $color);
$c = ImageColorsForIndex($im1, ImageColorAt($im1, 97, 2));
$color = ImageColorClosest($im1, $c['red'], $c['green'], $c['blue']);
ImageSetPixel($im1, 99, 0, $color);
$c = ImageColorsForIndex($im1, ImageColorAt($im1, 97, 97));
$color = ImageColorClosest($im1, $c['red'], $c['green'], $c['blue']);
ImageSetPixel($im1, 99, 99, $color);
for ($x = 1; $x < 99; $x++) {
$c1 = ImageColorsForIndex($im1, ImageColorAt($im, $x, 1));
$color = ImageColorClosest($im, $c1['red'], $c1['green'], $c1['blue']);
ImageSetPixel($im1, $x, 0, $color);
$c2 = ImageColorsForIndex($im1, ImageColorAt($im1, $x, 98));
$color = ImageColorClosest($im, $c2['red'], $c2['green'], $c2['blue']);
ImageSetPixel($im1, $x, 99, $color);
}
for ($y = 1; $y < 99; $y++) {
$c3 = ImageColorsForIndex($im1, ImageColorAt($im, 1, $y));
$color = ImageColorClosest($im, $c3['red'], $c3['green'], $c3['blue']);
ImageSetPixel($im1, 0, $y, $color);
$c4 = ImageColorsForIndex($im1, ImageColorAt($im1, 98, $y));
$color = ImageColorClosest($im, $c4['red'], $c4['green'], $c4['blue']);
ImageSetPixel($im1, 99, $y, $color);
}
}
ImageCopyBicubic($im2, $im, 0, 0, 2, 2, 35, 35, 96, 96);
if (function_exists('ImageJpeg')) {
if (ImageJpeg($im1, $CFG->dataroot . '/' . $dir . '/' . $id . '/f1.jpg', 90) and ImageJpeg($im2, $CFG->dataroot . '/' . $dir . '/' . $id . '/f2.jpg', 95)) {
@chmod($CFG->dataroot . '/' . $dir . '/' . $id . '/f1.jpg', 0666);
@chmod($CFG->dataroot . '/' . $dir . '/' . $id . '/f2.jpg', 0666);
return 1;
}
} else {
echo $OUTPUT->notification('PHP has not been configured to support JPEG images. Please correct this.');
}
return 0;
}
示例9: GD2BMPstring
public function GD2BMPstring(&$gd_image)
{
// Author: James Heinrich
// Purpose: Save file as type bmp
// Param in: The image canvas (passed as ref)
$imageX = ImageSX($gd_image);
$imageY = ImageSY($gd_image);
$BMP = '';
for ($y = $imageY - 1; $y >= 0; $y--) {
$thisline = '';
for ($x = 0; $x < $imageX; $x++) {
$argb = ImageColorsForIndex($gd_image, @ImageColorAt($gd_image, $x, $y));
$thisline .= chr($argb['blue']) . chr($argb['green']) . chr($argb['red']);
}
while (strlen($thisline) % 4) {
$thisline .= "";
}
$BMP .= $thisline;
}
$bmpSize = strlen($BMP) + 14 + 40;
// BITMAPFILEHEADER [14 bytes] - http://msdn.microsoft.com/library/en-us/gdi/bitmaps_62uq.asp
$BITMAPFILEHEADER = 'BM';
// WORD bfType;
$BITMAPFILEHEADER .= $this->LittleEndian2String($bmpSize, 4);
// DWORD bfSize;
$BITMAPFILEHEADER .= $this->LittleEndian2String(0, 2);
// WORD bfReserved1;
$BITMAPFILEHEADER .= $this->LittleEndian2String(0, 2);
// WORD bfReserved2;
$BITMAPFILEHEADER .= $this->LittleEndian2String(54, 4);
// DWORD bfOffBits;
// BITMAPINFOHEADER - [40 bytes] http://msdn.microsoft.com/library/en-us/gdi/bitmaps_1rw2.asp
$BITMAPINFOHEADER = $this->LittleEndian2String(40, 4);
// DWORD biSize;
$BITMAPINFOHEADER .= $this->LittleEndian2String($imageX, 4);
// LONG biWidth;
$BITMAPINFOHEADER .= $this->LittleEndian2String($imageY, 4);
// LONG biHeight;
$BITMAPINFOHEADER .= $this->LittleEndian2String(1, 2);
// WORD biPlanes;
$BITMAPINFOHEADER .= $this->LittleEndian2String(24, 2);
// WORD biBitCount;
$BITMAPINFOHEADER .= $this->LittleEndian2String(0, 4);
// DWORD biCompression;
$BITMAPINFOHEADER .= $this->LittleEndian2String(0, 4);
// DWORD biSizeImage;
$BITMAPINFOHEADER .= $this->LittleEndian2String(2835, 4);
// LONG biXPelsPerMeter;
$BITMAPINFOHEADER .= $this->LittleEndian2String(2835, 4);
// LONG biYPelsPerMeter;
$BITMAPINFOHEADER .= $this->LittleEndian2String(0, 4);
// DWORD biClrUsed;
$BITMAPINFOHEADER .= $this->LittleEndian2String(0, 4);
// DWORD biClrImportant;
return $BITMAPFILEHEADER . $BITMAPINFOHEADER . $BMP;
}
示例10: Resize_Image
function Resize_Image($src, $width = 0, $height = 0, $dst)
{
if ($height <= 0 && $width <= 0) {
return false;
}
// Setting defaults and meta
$image = '';
$final_width = 0;
$final_height = 0;
list($width_old, $height_old, $image_type) = GetImageSize($src);
// Calculating proportionality
if ($width == 0) {
$factor = $height / $height_old;
} elseif ($height == 0) {
$factor = $width / $width_old;
} else {
$factor = Min($width / $width_old, $height / $height_old);
}
$final_width = Round($width_old * $factor);
$final_height = Round($height_old * $factor);
// Loading image to memory according to type
switch ($image_type) {
case IMAGETYPE_GIF:
$image = imagecreatefromgif($src);
break;
case IMAGETYPE_JPEG:
$image = imagecreatefromjpeg($src);
break;
case IMAGETYPE_PNG:
$image = imagecreatefrompng($src);
break;
default:
return false;
}
// This is the resizing/resampling/transparency-preserving magic
$image_resized = ImageCreateTrueColor($final_width, $final_height);
if ($image_type == IMAGETYPE_GIF || $image_type == IMAGETYPE_PNG) {
$transparency = ImageColorTransparent($image);
if ($image_type == IMAGETYPE_GIF && $transparency >= 0) {
list($r, $g, $b) = Array_Values(ImageColorsForIndex($image, $transparency));
$transparency = ImageColorAllocate($image_resized, $r, $g, $b);
Imagefill($image_resized, 0, 0, $transparency);
ImageColorTransparent($image_resized, $transparency);
} elseif ($image_type == IMAGETYPE_PNG) {
ImageAlphaBlending($image_resized, false);
$color = ImageColorAllocateAlpha($image_resized, 0, 0, 0, 127);
ImageFill($image_resized, 0, 0, $color);
ImageSaveAlpha($image_resized, true);
}
}
ImageCopyResampled($image_resized, $image, 0, 0, 0, 0, $final_width, $final_height, $width_old, $height_old);
// Writing image
switch ($image_type) {
case IMAGETYPE_GIF:
imagegif($image_resized, $dst);
break;
case IMAGETYPE_JPEG:
imagejpeg($image_resized, $dst, 85);
break;
case IMAGETYPE_PNG:
imagepng($image_resized, $dst);
break;
default:
return false;
}
}
示例11: resize
/**
* From: https://stackoverflow.com/questions/4590441/php-thumbnail-image-resizing-with-proportions
*/
function resize(&$img, $size)
{
$pm = new PictshareModel();
$sd = $pm->sizeStringToWidthHeight($size);
$maxwidth = $sd['width'];
$maxheight = $sd['height'];
$width = imagesx($img);
$height = imagesy($img);
if (!ALLOW_BLOATING) {
if ($maxwidth > $width) {
$maxwidth = $width;
}
if ($maxheight > $height) {
$maxheight = $height;
}
}
if ($height > $width) {
$ratio = $maxheight / $height;
$newheight = $maxheight;
$newwidth = $width * $ratio;
} else {
$ratio = $maxwidth / $width;
$newwidth = $maxwidth;
$newheight = $height * $ratio;
}
$newimg = imagecreatetruecolor($newwidth, $newheight);
$palsize = ImageColorsTotal($img);
for ($i = 0; $i < $palsize; $i++) {
$colors = ImageColorsForIndex($img, $i);
ImageColorAllocate($newimg, $colors['red'], $colors['green'], $colors['blue']);
}
imagefill($newimg, 0, 0, IMG_COLOR_TRANSPARENT);
imagesavealpha($newimg, true);
imagealphablending($newimg, true);
imagecopyresampled($newimg, $img, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
$img = $newimg;
}
示例12: ImageColorsForIndex
<?php
$transparent = ImageColorsForIndex($image, ImageColorTransparent($image));
print_r($transparent);
示例13: imagecreate
// Otherwise, Assume Width Is Greater Than Height (Will Produce Same Result If Width Is Equal To Height)
$zoom = $twidth / $currwidth;
// Length Ratio For Height
$newwidth = $twidth;
// Width Is Equal To Max Width
$newheight = $currheight * $zoom;
// Creates The New Height
}
$dimg = imagecreate($newwidth, $newheight);
// Make New Image For Thumbnail
imagetruecolortopalette($simg, false, 256);
// Create New Color Pallete
$palsize = ImageColorsTotal($simg);
for ($i = 0; $i < $palsize; $i++) {
// Counting Colors In The Image
$colors = ImageColorsForIndex($simg, $i);
// Number Of Colors Used
ImageColorAllocate($dimg, $colors['red'], $colors['green'], $colors['blue']);
// Tell The Server What Colors This Image Will Use
}
imagecopyresized($dimg, $simg, 0, 0, 0, 0, $newwidth, $newheight, $currwidth, $currheight);
// Copy Resized Image To The New Image (So We Can Save It)
imagejpeg($dimg, "{$tdir}" . $_SESSION['user']['username'] . '.jpg');
// Saving The Image
imagedestroy($simg);
// Destroying The Temporary Image
imagedestroy($dimg);
// Destroying The Other Temporary Image
print 'Image thumbnail created successfully.';
// Resize successful
$user = new User(array('id' => $_SESSION['user']['id'], 'avatar' => $_SESSION['user']['username'] . '.jpg'));
示例14: GetPixelColor
private function GetPixelColor(&$img, $x, $y)
{
# Author: James Heinrich
# Purpose:
# Param in:
# Param out:
# Reference:
# Notes:#
if (!is_resource($img)) {
return false;
}
return @ImageColorsForIndex($img, @ImageColorAt($img, $x, $y));
}
示例15: __invoke
public function __invoke()
{
$view = $this->view;
$pixObject = $this->pixObject;
$id = $pixObject->getId();
$title = $pixObject->getTitle();
$pixname = $pixObject->getPicture();
$filepix = "/usr/local/apache2/html/uploads/";
$filepix .= $this->username;
$filepix .= "/pix/";
$pix = $filepix . $pixname;
// Check to see that the thumbnail exists.
$thumbPixName = "large_" . $pixname;
$thumbPix = $filepix . $thumbPixName;
if (!file_exists($thumbPix)) {
$img = imagecreatefromjpeg($pix);
$width = imagesx($img);
$height = imagesy($img);
$whlog = "width: " . $width . " height " . $height;
//determine which side is the longest to use in calculating length of the shorter side, since the longest will be the max size for whichever side is longest.
if ($height > $width) {
$ratio = 160 / $height;
$newheight = 160;
$newwidth = $width * $ratio;
} else {
$ratio = 160 / $width;
$newwidth = 160;
$newheight = $height * $ratio;
}
$whlog = "newwidth: " . $newwidth . " newheight " . $newheight;
//create new image resource to hold the resized image
$newimg = imagecreatetruecolor($newwidth, $newheight);
$palsize = ImageColorsTotal($img);
//Get palette size for original image
for ($i = 0; $i < $palsize; $i++) {
$colors = ImageColorsForIndex($img, $i);
ImageColorAllocate($newimg, $colors['red'], $colors['green'], $colors['blue']);
}
//copy original image into new image at new size.
imagecopyresized($newimg, $img, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
imagejpeg($newimg, $thumbPix);
//$output file is the path/filename where you wish to save the file.
}
$base = 'https://newhollandpress.com/pix/view/';
$base .= urlencode($id);
return $view->partial("/items/pix.phtml");
/*
$output = "<div id='" . $this->itemId . "' class='itemHelper_Wide'>";
$output .= "<ul>";
$output .= "<li>";
$output .= "<span>Pix</span>";
$output .= "</li>";
$output .= "<li>";
$output .= "<a href='" . $base . "'>" . $id . "</a>";
$output .= "</li>";
$output .= "<li>";
$output .= $pixObject->getPicture();
$output .= "</li>";
$output .= "<li>";
$output .= "<img src='https://www.newhollandpress.com/uploads/";
$output .= $this->username;
$output .= "/pix/";
$output .= $thumbPixName;
$output .= "'>";
$output .= "</li>";
$output .= "</ul>";
$output .= "</div>";
return $output;
*
*/
}