diff --git a/BoxImage.class.php b/BoxImage.class.php index 0e498aa..66e459f 100644 --- a/BoxImage.class.php +++ b/BoxImage.class.php @@ -1,183 +1,183 @@ -height = ceil(sqrt($size)); - $this->width = $this->height; - break; - case "line": - $this->height = 1; - $this->width = $size; - break; - case "bar": - $this->height = $size; - $this->width = 1; - break; - default: - throw new Exception("Unknown mode given!"); - break; - } - - //prepare image for PNG with transparency using the calculated size. - $this->image = imagecreatetruecolor($this->width, $this->height); - - //set the alpha stuff - imagesavealpha($this->image, TRUE); - imagealphablending($this->image, FALSE); - - //initialize pointers. - $this->resetPointer(); - } - - /** - * Resets pointer. - * @return void - */ - public function resetPointer() { - $this->pointer_x = 0; - $this->pointer_y = 0; - } - - /** - * Fills the image with the given color. - * @param int $r 0 - 255 - * @param int $g 0 - 255 - * @param int $b 0 - 255 - * @param int $a 127 - 0 - * @return void - */ - public function fillImage($r, $g, $b, $a) { - $color = imagecolorallocatealpha($this->image, $r, $g, $b, $a); - imagefill($this->image, 0, 0, $color); - imagecolordeallocate($this->image, $color); - } - - /** - * Sets the current pixel to the given color, moves the "pointer" of the image. - * @param int $r 0 - 255 - * @param int $g 0 - 255 - * @param int $b 0 - 255 - * @param int $a 127 - 0 - * @return void - */ - public function setCurrentPixel($r, $g, $b, $a) { - $color = imagecolorallocatealpha($this->image, $r, $g, $b, $a); - imagesetpixel($this->image, $this->pointer_x, $this->pointer_y, $color); - imagecolordeallocate($this->image, $color); - } - - /** - * Moves the x and y pointers of the image according to the offset. - * @param int $offset - * @throws Exception - * @return void - */ - public function movePointer($offset) { - //echo $this->pointer_x.",".$this->pointer_y." --> "; - - if($offset === 0) return; - if($offset > 0) $step = 1; - if($offset < 0){ - $step = -1; - $offset = $offset * -1; - } - - if(!isset($step)) throw new Exception("What the fuck?"); - - for($i = $offset; $i > 0; $i--) { - //if we go back - if($step === -1) { - //decrease x-pointer - $this->pointer_x -= 1; - //handle y-jumps - if($this->pointer_x < 0) { - $this->pointer_x = $width; - $this->pointer_y -= 1; - //out of range? - if($this->pointer_y < 0) throw new Exception("Out of range! (width)"); - } - - //if we go forward - } elseif($step === 1) { - //increase x-pointer - $this->pointer_x += 1; - //handle y-jumps - if($this->pointer_x >= $this->width) { - $this->pointer_x = 0; - $this->pointer_y += 1; - //out of range? - if($this->pointer_y >= $this->height) throw new Exception("Out of range! (height)"); - } - } //end of if - } //end of for - - //echo $this->pointer_x.",".$this->pointer_y."\n"; - } //end of function - - /** - * Writes the PNG to a file. - * @param string $filename - * @param int $compression 0-9 - * @return boolean - */ - public function writeToFile($filename, $compression) { - return imagepng($this->image, $filename, $compression); - } - - /** - * Gets height. - * @return int - */ - public function getHeight() { - return $this->height; - } - - /** - * Gets width. - * @return int - */ - public function getWidth() { - return $this->width; - } - +height = ceil(sqrt($size)); + $this->width = $this->height; + break; + case "line": + $this->height = 1; + $this->width = $size; + break; + case "bar": + $this->height = $size; + $this->width = 1; + break; + default: + throw new Exception("Unknown mode given!"); + break; + } + + //prepare image for PNG with transparency using the calculated size. + $this->image = imagecreatetruecolor($this->width, $this->height); + + //set the alpha stuff + imagesavealpha($this->image, TRUE); + imagealphablending($this->image, FALSE); + + //initialize pointers. + $this->resetPointer(); + } + + /** + * Resets pointer. + * @return void + */ + public function resetPointer() { + $this->pointer_x = 0; + $this->pointer_y = 0; + } + + /** + * Fills the image with the given color. + * @param int $r 0 - 255 + * @param int $g 0 - 255 + * @param int $b 0 - 255 + * @param int $a 127 - 0 + * @return void + */ + public function fillImage($r, $g, $b, $a) { + $color = imagecolorallocatealpha($this->image, $r, $g, $b, $a); + imagefill($this->image, 0, 0, $color); + imagecolordeallocate($this->image, $color); + } + + /** + * Sets the current pixel to the given color, moves the "pointer" of the image. + * @param int $r 0 - 255 + * @param int $g 0 - 255 + * @param int $b 0 - 255 + * @param int $a 127 - 0 + * @return void + */ + public function setCurrentPixel($r, $g, $b, $a) { + $color = imagecolorallocatealpha($this->image, $r, $g, $b, $a); + imagesetpixel($this->image, $this->pointer_x, $this->pointer_y, $color); + imagecolordeallocate($this->image, $color); + } + + /** + * Moves the x and y pointers of the image according to the offset. + * @param int $offset + * @throws Exception + * @return void + */ + public function movePointer($offset) { + //echo $this->pointer_x.",".$this->pointer_y." --> "; + + if($offset === 0) return; + if($offset > 0) $step = 1; + if($offset < 0){ + $step = -1; + $offset = $offset * -1; + } + + if(!isset($step)) throw new Exception("What the fuck?"); + + for($i = $offset; $i > 0; $i--) { + //if we go back + if($step === -1) { + //decrease x-pointer + $this->pointer_x -= 1; + //handle y-jumps + if($this->pointer_x < 0) { + $this->pointer_x = $width; + $this->pointer_y -= 1; + //out of range? + if($this->pointer_y < 0) throw new Exception("Out of range! (width)"); + } + + //if we go forward + } elseif($step === 1) { + //increase x-pointer + $this->pointer_x += 1; + //handle y-jumps + if($this->pointer_x >= $this->width) { + $this->pointer_x = 0; + $this->pointer_y += 1; + //out of range? + if($this->pointer_y >= $this->height) throw new Exception("Out of range! (height)"); + } + } //end of if + } //end of for + + //echo $this->pointer_x.",".$this->pointer_y."\n"; + } //end of function + + /** + * Writes the PNG to a file. + * @param string $filename + * @param int $compression 0-9 + * @return boolean + */ + public function writeToFile($filename, $compression) { + return imagepng($this->image, $filename, $compression); + } + + /** + * Gets height. + * @return int + */ + public function getHeight() { + return $this->height; + } + + /** + * Gets width. + * @return int + */ + public function getWidth() { + return $this->width; + } + } \ No newline at end of file diff --git a/FileImageConverter.class.php b/FileImageConverter.class.php index a5a8e17..3db2eb2 100644 --- a/FileImageConverter.class.php +++ b/FileImageConverter.class.php @@ -1,149 +1,149 @@ -colorConverter = new CharColorConverter(); - echo "done.\n"; - } - - /** - * Processes the given file, returns the filename of the resulting PNG-File. - * @param string $filename - * @return void - * @throws Exception - */ - public function convertFile($filename, $mode) { - if(file_exists($filename) === FALSE) throw new Exception("Invalid filename given!"); - - //get file data - $filesize = filesize($filename); - $md5 = md5_file($filename); - - echo "Processing '" . $filename . "' (" . $filesize . " Bytes) - MD5: " . $md5 . "\n"; - - $new_filename = basename($filename)."-converted.png"; - - echo "Filename for the result: '" . $new_filename . "'\n"; - - //some gradient - $fancy_header = ""; - for($i = 0;$i < 255;$i += 5) { - $fancy_header .= chr($i); - } - - //header done, now read the file content - $content = file_get_contents($filename); - - //get final minimum size for the image - //(do not mix up strlen of $filesize and the actual $filesize) - $size = strlen($fancy_header) + 1 + strlen($filesize) + 1 + strlen($md5) + 1 + $filesize + 1; - - //create and prepare image - $this->image = new BoxImage($size, $mode); - - echo "Image will be " . $this->image->getWidth() . "px X " . $this->image->getHeight() . "px. (Mode: " . $mode . ")\n"; - - echo "Filling image..."; - $this->image->fillImage(0,0,0,0); - echo "done.\n"; - - //some fancy header - echo "Adding header...\n"; - $this->addDataToImage($fancy_header); - - //magic pixel - $this->image->setCurrentPixel(0,0,0,127); - $this->image->movePointer(1); - - //add filesize - echo "Adding filesize...\n"; - $this->addDataToImage($filesize); - - //magic pixel - $this->image->setCurrentPixel(0,0,0,127); - $this->image->movePointer(1); - - //add md5 value of content - echo "Adding MD5-Hash...\n"; - $this->addDataToImage($md5); - - //magic pixel - $this->image->setCurrentPixel(0,0,0,127); - $this->image->movePointer(1); - - //content - echo "Adding file contents...\n"; - $this->addDataToImage($content); - - //magic pixel - last pixel for line and bar mode, do NOT move pointer! - $this->image->setCurrentPixel(0,0,0,127); - - //save image - echo "Saving image..."; - $this->image->writeToFile($new_filename, 9); - echo "done.\n"; - - //clean up - unset($this->image); - } - - /** - * Converts data and adds it to the image. - * @param string $data - * @return void - */ - protected function addDataToImage($data) { - try { - $strlen = strlen($data); - for($i = 0;$i < $strlen; $i++) { - $char = substr($data, $i, 1); - //convert char to color - list($r, $g, $b) = $this->colorConverter->charToColor($char); - //set the pixel - $this->image->setCurrentPixel($r, $g, $b, 0); - //move the pointer - $this->image->movePointer(1); - $this->progressBar($i, $strlen); - } - - } catch (Exception $e) { - //TODO: handle weird shit? - echo "Caught Exception:\n"; - echo $e; - } - echo "\rdone. \n\n"; - } - - /** - * Displays a simple progressbar using \r - * @param int $x - * @param int $total - * @return void - */ - protected function progressBar($x, $total) { - $percent = round($x / $total * 100, 2); - echo " \r"; - echo "Working... " . $percent . " %"; - } - -} +colorConverter = new CharColorConverter(); + echo "done.\n"; + } + + /** + * Processes the given file, returns the filename of the resulting PNG-File. + * @param string $filename + * @return void + * @throws Exception + */ + public function convertFile($filename, $mode) { + if(file_exists($filename) === FALSE) throw new Exception("Invalid filename given!"); + + //get file data + $filesize = filesize($filename); + $md5 = md5_file($filename); + + echo "Processing '" . $filename . "' (" . $filesize . " Bytes) - MD5: " . $md5 . "\n"; + + $new_filename = basename($filename)."-converted.png"; + + echo "Filename for the result: '" . $new_filename . "'\n"; + + //some gradient + $fancy_header = ""; + for($i = 0;$i < 255;$i += 5) { + $fancy_header .= chr($i); + } + + //header done, now read the file content + $content = file_get_contents($filename); + + //get final minimum size for the image + //(do not mix up strlen of $filesize and the actual $filesize) + $size = strlen($fancy_header) + 1 + strlen($filesize) + 1 + strlen($md5) + 1 + $filesize + 1; + + //create and prepare image + $this->image = new BoxImage($size, $mode); + + echo "Image will be " . $this->image->getWidth() . "px X " . $this->image->getHeight() . "px. (Mode: " . $mode . ")\n"; + + echo "Filling image..."; + $this->image->fillImage(0,0,0,0); + echo "done.\n"; + + //some fancy header + echo "Adding header...\n"; + $this->addDataToImage($fancy_header); + + //magic pixel + $this->image->setCurrentPixel(0,0,0,127); + $this->image->movePointer(1); + + //add filesize + echo "Adding filesize...\n"; + $this->addDataToImage($filesize); + + //magic pixel + $this->image->setCurrentPixel(0,0,0,127); + $this->image->movePointer(1); + + //add md5 value of content + echo "Adding MD5-Hash...\n"; + $this->addDataToImage($md5); + + //magic pixel + $this->image->setCurrentPixel(0,0,0,127); + $this->image->movePointer(1); + + //content + echo "Adding file contents...\n"; + $this->addDataToImage($content); + + //magic pixel - last pixel for line and bar mode, do NOT move pointer! + $this->image->setCurrentPixel(0,0,0,127); + + //save image + echo "Saving image..."; + $this->image->writeToFile($new_filename, 9); + echo "done.\n"; + + //clean up + unset($this->image); + } + + /** + * Converts data and adds it to the image. + * @param string $data + * @return void + */ + protected function addDataToImage($data) { + try { + $strlen = strlen($data); + for($i = 0;$i < $strlen; $i++) { + $char = substr($data, $i, 1); + //convert char to color + list($r, $g, $b) = $this->colorConverter->charToColor($char); + //set the pixel + $this->image->setCurrentPixel($r, $g, $b, 0); + //move the pointer + $this->image->movePointer(1); + $this->progressBar($i, $strlen); + } + + } catch (Exception $e) { + //TODO: handle weird shit? + echo "Caught Exception:\n"; + echo $e; + } + echo "\rdone. \n\n"; + } + + /** + * Displays a simple progressbar using \r + * @param int $x + * @param int $total + * @return void + */ + protected function progressBar($x, $total) { + $percent = round($x / $total * 100, 2); + echo " \r"; + echo "Working... " . $percent . " %"; + } + +} ?> \ No newline at end of file diff --git a/Main.php b/Main.php index 632cd50..c5cee9e 100644 --- a/Main.php +++ b/Main.php @@ -1,13 +1,13 @@ -convertFile($filename, $mode); - +convertFile($filename, $mode); + ?> \ No newline at end of file