public function border($attr) { global $wf; $ic = $wf->get_image_class(); $r = wp_parse_args( $attr, array( "width" => 1, // border width "mode" => "o", // mode - i (inset, same size, original image will shrink inside border), or o (outset, image size will increase for border) "color" => "FFF" // gap between image and reflection )); $color = $r["color"]; $color_hex = $r["color"]; if (!is_array($color)) { $color = WOOF::hex_to_rgb($color); } else { $color_hex = WOOF::rgb_to_hex($color); } if (isset($r["w"])) { $r["width"] = $r["w"]; } $r["suffix"] = ".border.".str_replace("#", "", $color_hex).$r["mode"].$r["width"]; $ci = $this->cacheinfo($r); if (file_exists($ci["path"]) && !isset($r["nocache"])) { return new $ic( $ci["path"], $ci["url"], $this->attr() ); } else { $image = WOOF_Image::load($this->filepath()); if ($r["mode"] == "o") { $output_height = $this->height() + ($r["width"] * 2); // calculate height of output image $output_width = $this->width() + ($r["width"] * 2); // calculate height of output image } else { $output_height = $this->height(); $output_width = $this->width(); } $out = imagecreatetruecolor($output_width, $output_height); imagealphablending($out, false); $bg = imagecolorallocate($out, $color[0], $color[1], $color[2]); imagefill($out, 0, 0, $bg); if ($r["mode"] == "o") { imagecopyresized($out, $image, $r["width"], $r["width"], 0, 0, $this->width(), $this->height(), $this->width(), $this->height()); } else { imagecopyresized($out, $image, $r["width"], $r["width"], 0, 0, $this->width() - ($r["width"] * 2), $this->height() - ($r["width"] * 2), $this->width(), $this->height()); } if ( self::save_image( $ci["path"], $out, $this->infer_content_type($r) ) ) { return new $ic( $ci["path"], $ci["url"], $this->attr() ); } } }