99 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			99 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
 | 
						|
function microtime_float() {
 | 
						|
   list($usec, $sec) = explode(" ", microtime());
 | 
						|
   return ((float)$usec + (float)$sec);
 | 
						|
}
 | 
						|
 | 
						|
function makeThumb($item = "") {
 | 
						|
   if ( $item == "" ) { return false; }
 | 
						|
   if ( is_dir($item) ) {
 | 
						|
      $isfolder = true;
 | 
						|
      $folder = $item;
 | 
						|
      $files = array();
 | 
						|
      if ( $fh = opendir($folder) ) {
 | 
						|
         while ( false !== ($entry = readdir($fh)) ) {
 | 
						|
            if ( is_file($item . "/" . $entry) ) {
 | 
						|
               $files[] = $entry;
 | 
						|
            }
 | 
						|
         }
 | 
						|
         closedir($fh);
 | 
						|
         natsort($files);
 | 
						|
      }
 | 
						|
      if ( count($files) == 0 ) { return false; }
 | 
						|
      reset($files);
 | 
						|
      $comic = $folder . "/" . current($files);
 | 
						|
      $outfile = THUMBSDIR . substr($folder, strlen(COMICSDIR)) . "_oem";
 | 
						|
   } elseif ( is_file($item) ) {
 | 
						|
      $isfolder = false;
 | 
						|
      $file = $item;
 | 
						|
      $comic = $file;
 | 
						|
      $targetdir = THUMBSDIR . substr(dirname($file), strlen(COMICSDIR)) . "/";
 | 
						|
      if ( !is_dir($targetdir) ) {
 | 
						|
         mkdir($targetdir, 0755, true);
 | 
						|
      }
 | 
						|
      $outfile = $targetdir . substr(basename($file), 0, -4) . "_oem";
 | 
						|
   } else {
 | 
						|
      return false;
 | 
						|
   }
 | 
						|
   if ( substr($comic, -3) == "cbz" ) {
 | 
						|
      $zip = new ZipArchive();
 | 
						|
      $opened = $zip->open($comic);
 | 
						|
      if ( !$opened ) { return false; }
 | 
						|
      $lowest = "~";
 | 
						|
      $imgdata = null;
 | 
						|
      for ( $i=0; $i<$zip->numFiles; $i++ ) {
 | 
						|
         $imgname = basename($zip->getNameIndex($i));
 | 
						|
         if ( (strcmp($lowest, $imgname) > 0)
 | 
						|
              && ((strcasecmp(substr($imgname, -3), "jpg") == 0)
 | 
						|
                  || (strcasecmp(substr($imgname, -3), "png") == 0)) ) {
 | 
						|
            $lowest = $imgname;
 | 
						|
            $imgdata = $zip->getFromIndex($i);
 | 
						|
         }
 | 
						|
      }
 | 
						|
      $zip->close();
 | 
						|
      if ( is_null($imgdata) ) return false;
 | 
						|
      $didwrite = file_put_contents($outfile, $imgdata);
 | 
						|
      if ( !$didwrite ) return false;
 | 
						|
   } elseif ( substr($comic, -3) == "cbr" ) {
 | 
						|
      $rar_file = rar_open($comic);
 | 
						|
      if ( $rar_file === false ) { return false; }
 | 
						|
      $entries = rar_list($rar_file);
 | 
						|
      $lowest = "~";
 | 
						|
      foreach ( $entries as $entry ) {
 | 
						|
         $imgname = $entry->getName();
 | 
						|
         if ( (strcmp($lowest, $imgname) > 0)
 | 
						|
              && ((strcasecmp(substr($imgname, -3), "jpg") == 0)
 | 
						|
                  || (strcasecmp(substr($imgname, -3), "png") == 0)) ) {
 | 
						|
            $lowest = $imgname;
 | 
						|
            $ext = strtolower(substr($imgname, -3));
 | 
						|
            $didwrite = $entry->extract(false, $outfile);
 | 
						|
            if ( !$didwrite ) { return false; }
 | 
						|
         }
 | 
						|
      }
 | 
						|
      rar_close($rar_file);
 | 
						|
   } else {
 | 
						|
      return false;
 | 
						|
   }
 | 
						|
   $input = new Imagick($outfile);
 | 
						|
   $input->setImageFormat("jpg");
 | 
						|
   $width = $input->getImageWidth();
 | 
						|
   $height = $input->getImageHeight();
 | 
						|
   $scale = 200 / $width;
 | 
						|
   $newx = 200;
 | 
						|
   $newy = intval($height * $scale);
 | 
						|
   if ( $newy > 300 ) {
 | 
						|
      $newy = 300;
 | 
						|
      $scale = $height / 300;
 | 
						|
      $newx = intval($width / $scale);
 | 
						|
   }
 | 
						|
   $thumb = substr($outfile, 0, -4) . ".jpg";
 | 
						|
   $thumb = str_replace("#", "", $thumb);
 | 
						|
   $input->resizeImage($newx, $newy, Imagick::FILTER_SINC, 1);
 | 
						|
   $written = file_put_contents($thumb, $input->getImageBlob());
 | 
						|
   unlink($outfile);
 | 
						|
   return (($written === false) ? false : true);
 | 
						|
}
 | 
						|
 | 
						|
// vim: set ai et ts=3 sw=3:
 |