colorConverter = new CharColorConverter(); } /** * Processes the given file, returns the filename of the resulting PNG-File. * @param string $filename * @return void * @throws Exception */ public function convertFile($filename) { 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); echo "Image will be " . $this->image->getWidth() . "px x " . $this->image->getHeight() . "px.\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 $this->image->setCurrentPixel(0,0,0,127); $this->image->movePointer(1); //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 . " %"; } } ?>