You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
cacert-testmgr/external/ZendFramework-1.9.5/externals/dojo/demos/faces/resources/imageMaker.php

135 lines
3.5 KiB
PHP

<?php
// fake a delay until actual backend processing is going on
// sleep(3);
require_once "lib.php";
// PHP4 and low 5 compatibility?:
if(!function_exists('json_encode')){
require("../../dojo/tests/resources/JSON.php");
$jsonMaker = new Services_JSON;
function json_encode($obj){
return $jsonMaker->encode($obj);
}
function json_decode($str){
return $jsonMaker->decode($str);
}
}
// create $hair, $eyes, and $mouth variables
foreach(array("hair","eyes","mouth") as $part){
if(!empty($_POST[$part])){
// FIXME: add [a-zA-Z] matching here:
$$part = $_POST[$part];
}
}
if(isset($hair) && isset($eyes) && isset($mouth)){
$result = array();
$nick = createName($hair, $eyes, $mouth);
$outfile = "cache/" . $nick . ".jpg";
$thumbfile = "cache/." . $nick . "_thumb.jpg";
if(!file_exists("../" . $outfile)){
// TODO: create and cache this image in images/shame/
$width = 230; $height = 326;
$im = imageCreateTrueColor($width, $height);
$bgColor = imagecolorallocate($img, 255,255,255);
imagefill($im, 0, 0, $bgColor);
$parts = array(
"hair" => array(0, 0, 230, 120),
"eyes" => array(0, 120, 230, 94),
"mouth" => array(0, 214, 230, 113)
);
foreach($parts as $part => $dst){
// copy each slice into the new image
$tmpfile = "../images/" . $$part . ".jpg";
if(file_exists($tmpfile)){
$tmp = imageCreateFromJpeg($tmpfile);
imagecopy($im, $tmp, $dst[0], $dst[1], $dst[0], $dst[1], $dst[2], $dst[3]);
imagedestroy($tmp);
}
}
imagejpeg($im, "../" . $outfile);
if(!file_exists("../" . $thumbfile)){
$thumb = createThumb($im, 55);
imagejpeg($thumb, "../" . $thumbfile);
}
$result['addToList'] = true;
$result['thumb'] = $thumbfile;
}else{
// duplicate!
$result["duplicate"] = true;
}
$result["name"] = $nick;
$result["clan"] = getClanName($nick);
$result["file"] = $outfile;
// send the final data back as a success!
print json_encode($result);
}else{
print json_encode(array("error" => "error, someone didn't flip enough!"));
}
function createName($first, $middle, $last){
if($first == $middle && $middle == $last){
// edge case where longer names are more interesting, but
// we want to show the real name when all three pieces are
// one person:
$str = $first;
}else{
// break each name into thirds, then return the mashup name
// from the appropriate slice:
$first_len = ceil(strlen($first) / 3);
$mid_len = ceil(strlen($middle) / 3);
$last_len = ceil(strlen($last) / 3);
$first_seg = substr($first, 0, $first_len);
$mid_seg = substr($middle, $mid_len, ($mid_len * 2) - 1);
$last_seg = substr($last, $last_len * -1, $last_len);
$str = $first_seg . $mid_seg . $last_seg;
}
return $str;
}
function createThumb($src, $maxd){
$srcw = imagesx($src);
$srch = imagesy($src);
if($srcw<$srch){
$height = $maxd;
$width=floor($srcw * $height / $srch);
}else{
$width = $maxd;
$height = floor($srch * $width / $srcw);
}
if($width > $srcw && $height > $srch){
$width = $srcw;
$height=$srch;
} //if image is actually smaller than you want, leave small (remove this line to resize anyway)
$dest = imagecreatetruecolor($width, $height);
if($height < 100){
imagecopyresized($dest, $src, 0, 0, 0, 0, $width, $height, imagesx($src), imagesy($src));
}else{
imagecopyresampled($dest, $src, 0, 0, 0, 0, $width, $height, imagesx($src), imagesy($src));
}
return $dest;
}
?>