Een afbeelding verdelen in kleine stukjes.

Status
Niet open voor verdere reacties.

KeesdeOude

Gebruiker
Lid geworden
29 mei 2008
Berichten
35
Voor een programma in html/javascript moet ik een aantal grote afbeeldingen (800x560x24) verdelen in stukjes van 40x40. Dat doe ik met Paint, dat is daarvoor heel geschikt. Alleen... één afbeelding zo bewerken kost me een paar uur en het is saai en vervelend werk! Helaas weet ik geen andere methode dan dit handwerk. Vroeger zou ik hiervoor een QuickBasic programmaatje hebben geschreven, maar dat gaat maar tot 16 kleuren.
Weet iemand een programmatische methode om dit uit te voeren? Ik houd me aanbevolen!
Vriendelijke groeten van Kees de Oude.
 
nouja, niet met Javascript. Met CSS kun je wel een deel van een afbeelding weergeven, dus als het alleen om web-toepassing gaat dan hoef je de afbeelding helemaal niet te knippen.

Overigens gaat het al een stuk sneller met een beter programma als Paint Shop Pro of Photoshop. Maar je hebt gelijk, het moet automatisch:p Alleen niet met Javascript dus. PHP kan wel plaatjes bewerken. Of c++, een andere basic variant of Java. Er is genoeg.
 
Dat is volgens mij werk voor C++ ofzo...
Of als je handig bent met hex editors kan je je afbeelding ook wat bijknippen met find&replace, met bv xvi32.
 
in GIMP (en dus wschl ook in photoshop) kan je adhv van Script-Fu een automatisatie schrijven die je dan als batch over een map met afbeeldingen kan laten gaan.
Zelf heb ik zo goed als geen ervaring met the GIMP, dus ik vrees dat ik je geen afgewerkt script kan geven..
 
nouja, niet met Javascript. Met CSS kun je wel een deel van een afbeelding weergeven, dus als het alleen om web-toepassing gaat dan hoef je de afbeelding helemaal niet te knippen.

Overigens gaat het al een stuk sneller met een beter programma als Paint Shop Pro of Photoshop. Maar je hebt gelijk, het moet automatisch:p Alleen niet met Javascript dus. PHP kan wel plaatjes bewerken. Of c++, een andere basic variant of Java. Er is genoeg.

Er is genoeg, denk je. PHP, c++ en Java zijn voor mij niet weggelegd. Wat is er nog meer?
Kees
 
Dat is volgens mij werk voor C++ ofzo...
Of als je handig bent met hex editors kan je je afbeelding ook wat bijknippen met find&replace, met bv xvi32.

Hallo Niels,
c++ ken ik alleen van naam. Helaas .... onderdehand heb ik al 5 afbeeldin gen met de hand gedaan. Brrrrr... Maa toch bedankt.
 
in GIMP (en dus wschl ook in photoshop) kan je adhv van Script-Fu een automatisatie schrijven die je dan als batch over een map met afbeeldingen kan laten gaan.
Zelf heb ik zo goed als geen ervaring met the GIMP, dus ik vrees dat ik je geen afgewerkt script kan geven..

GIMP, Script-Fu, allemaal buitenaards voor mij! Nog nooit van gehoord, ik ken alleen wat simpele zaken, ofschoon ik daar ooit heel leuke dingen mee heb gemaakt. Te oud voor iets nieuws, denk ik. Evengoed bedankt!
 
Nou, ik ben er even druk mee geweest, maar ik heb een script voor je af!

Op: http://www.specialwebservice.nl/imageSlicer/imageslicer.php

Kun je een afbeelding ingeven, de hoogte van een 'blokje' en de breedte van een 'blokje' en dan krijg je een zip-file met alle 'blokjes' van mij terug! :D

Voor degenen die mijn code nog willen zien:

CreateZipFile.php:

PHP:
<?php

/**
 * Class to dynamically create a zip file (archive)
 *
 * @author Rochak Chauhan
 */

class createZip  {  

	public $compressedData = array(); 
	public $centralDirectory = array(); // central directory   
	public $endOfCentralDirectory = "\x50\x4b\x05\x06\x00\x00\x00\x00"; //end of Central directory record
	public $oldOffset = 0;

	/**
	 * Function to create the directory where the file(s) will be unzipped
	 *
	 * @param $directoryName string 
	 *
	 */
	
	public function addDirectory($directoryName) {
		$directoryName = str_replace("\\", "/", $directoryName);  

		$feedArrayRow = "\x50\x4b\x03\x04";
		$feedArrayRow .= "\x0a\x00";    
		$feedArrayRow .= "\x00\x00";    
		$feedArrayRow .= "\x00\x00";    
		$feedArrayRow .= "\x00\x00\x00\x00"; 

		$feedArrayRow .= pack("V",0); 
		$feedArrayRow .= pack("V",0); 
		$feedArrayRow .= pack("V",0); 
		$feedArrayRow .= pack("v", strlen($directoryName) ); 
		$feedArrayRow .= pack("v", 0 ); 
		$feedArrayRow .= $directoryName;  

		$feedArrayRow .= pack("V",0); 
		$feedArrayRow .= pack("V",0); 
		$feedArrayRow .= pack("V",0); 

		$this -> compressedData[] = $feedArrayRow;
		
		$newOffset = strlen(implode("", $this->compressedData));

		$addCentralRecord = "\x50\x4b\x01\x02";
		$addCentralRecord .="\x00\x00";    
		$addCentralRecord .="\x0a\x00";    
		$addCentralRecord .="\x00\x00";    
		$addCentralRecord .="\x00\x00";    
		$addCentralRecord .="\x00\x00\x00\x00"; 
		$addCentralRecord .= pack("V",0); 
		$addCentralRecord .= pack("V",0); 
		$addCentralRecord .= pack("V",0); 
		$addCentralRecord .= pack("v", strlen($directoryName) ); 
		$addCentralRecord .= pack("v", 0 ); 
		$addCentralRecord .= pack("v", 0 ); 
		$addCentralRecord .= pack("v", 0 ); 
		$addCentralRecord .= pack("v", 0 ); 
		$ext = "\x00\x00\x10\x00";
		$ext = "\xff\xff\xff\xff";  
		$addCentralRecord .= pack("V", 16 ); 

		$addCentralRecord .= pack("V", $this -> oldOffset ); 
		$this -> oldOffset = $newOffset;

		$addCentralRecord .= $directoryName;  

		$this -> centralDirectory[] = $addCentralRecord;  
	}	 
	
	/**
	 * Function to add file(s) to the specified directory in the archive 
	 *
	 * @param $directoryName string 
	 *
	 */
	
	public function addFile($data, $directoryName)   {
 
		$directoryName = str_replace("\\", "/", $directoryName);  
	
		$feedArrayRow = "\x50\x4b\x03\x04";
		$feedArrayRow .= "\x14\x00";    
		$feedArrayRow .= "\x00\x00";    
		$feedArrayRow .= "\x08\x00";    
		$feedArrayRow .= "\x00\x00\x00\x00"; 

		$uncompressedLength = strlen($data);  
		$compression = crc32($data);  
		$gzCompressedData = gzcompress($data);  
		$gzCompressedData = substr( substr($gzCompressedData, 0, strlen($gzCompressedData) - 4), 2); 
		$compressedLength = strlen($gzCompressedData);  
		$feedArrayRow .= pack("V",$compression); 
		$feedArrayRow .= pack("V",$compressedLength); 
		$feedArrayRow .= pack("V",$uncompressedLength); 
		$feedArrayRow .= pack("v", strlen($directoryName) ); 
		$feedArrayRow .= pack("v", 0 ); 
		$feedArrayRow .= $directoryName;  

		$feedArrayRow .= $gzCompressedData;  

		$feedArrayRow .= pack("V",$compression); 
		$feedArrayRow .= pack("V",$compressedLength); 
		$feedArrayRow .= pack("V",$uncompressedLength); 

		$this -> compressedData[] = $feedArrayRow;

		$newOffset = strlen(implode("", $this->compressedData));

		$addCentralRecord = "\x50\x4b\x01\x02";
		$addCentralRecord .="\x00\x00";    
		$addCentralRecord .="\x14\x00";    
		$addCentralRecord .="\x00\x00";    
		$addCentralRecord .="\x08\x00";    
		$addCentralRecord .="\x00\x00\x00\x00"; 
		$addCentralRecord .= pack("V",$compression); 
		$addCentralRecord .= pack("V",$compressedLength); 
		$addCentralRecord .= pack("V",$uncompressedLength); 
		$addCentralRecord .= pack("v", strlen($directoryName) ); 
		$addCentralRecord .= pack("v", 0 );
		$addCentralRecord .= pack("v", 0 );
		$addCentralRecord .= pack("v", 0 );
		$addCentralRecord .= pack("v", 0 );
		$addCentralRecord .= pack("V", 32 ); 

		$addCentralRecord .= pack("V", $this -> oldOffset ); 
		$this -> oldOffset = $newOffset;

		$addCentralRecord .= $directoryName;  

		$this -> centralDirectory[] = $addCentralRecord;  
	}

	/**
	 * Fucntion to return the zip file
	 *
	 * @return zipfile (archive)
	 */

	public function getZippedfile() { 

		$data = implode("", $this -> compressedData);  
		$controlDirectory = implode("", $this -> centralDirectory);  

		return   
			$data.  
			$controlDirectory.  
			$this -> endOfCentralDirectory.  
			pack("v", sizeof($this -> centralDirectory)).     
			pack("v", sizeof($this -> centralDirectory)).     
			pack("V", strlen($controlDirectory)).             
			pack("V", strlen($data)).                
			"\x00\x00";                             
	}

	/**
	 *
	 * Function to force the download of the archive as soon as it is created
	 *
	 * @param archiveName string - name of the created archive file
	 */

	public function forceDownload($archiveName) {
		$headerInfo = '';
		 
		if(ini_get('zlib.output_compression')) {
			ini_set('zlib.output_compression', 'Off');
		}

		// Security checks
		if( $archiveName == "" ) {
			echo "<html><title>Public Photo Directory - Download </title><body><BR><B>ERROR:</B> The download file was NOT SPECIFIED.</body></html>";
			exit;
		} 
		elseif ( ! file_exists( $archiveName ) ) {
			echo "<html><title>Public Photo Directory - Download </title><body><BR><B>ERROR:</B> File not found.</body></html>";
			exit;
		}

		header("Pragma: public");
		header("Expires: 0");
		header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
		header("Cache-Control: private",false);
		header("Content-Type: application/zip");
		header("Content-Disposition: attachment; filename=".basename($archiveName).";" );
		header("Content-Transfer-Encoding: binary");
		header("Content-Length: ".filesize($archiveName));
		readfile("$archiveName");
		
	 }

}

class createDirZip extends createZip {
 
	function get_files_from_folder($directory, $put_into) {
		if ($handle = opendir($directory)) {
			while (false !== ($file = readdir($handle))) {
				if (is_file($directory.$file)) {
					$fileContents = file_get_contents($directory.$file);
					$this->addFile($fileContents, $put_into.$file);
				} elseif ($file != '.' and $file != '..' and is_dir($directory.$file)) {
					$this->addDirectory($put_into.$file.'/');
					$this->get_files_from_folder($directory.$file.'/', $put_into.$file.'/');
				}
			}
		}
		closedir($handle);
	}
}



?>

imageslicer.php:

PHP:
<?php
if($_SERVER['REQUEST_METHOD'] == 'POST'){
	$_FILES['image1']['name'] = str_replace(' ', '_', $_FILES['image1']['name']);
	$file_basename = substr($_FILES['image1']['name'], 0, strripos($_FILES['image1']['name'], '.')); // strip extention
  $file_ext      = strtolower(substr($_FILES['image1']['name'], strripos($_FILES['image1']['name'], '.') + 1));
	if($file_ext == 'jpg' || $file_ext == 'jpeg'){
		$imageHandle = imagecreatefromjpeg($_FILES['image1']['tmp_name']);
	} else if($file_ext == 'png'){
		$imageHandle = imagecreatefrompng($_FILES['image1']['tmp_name']);
	} else if($file_ext == 'gif'){
		$imageHandle = imagecreatefromgif($_FILES['image1']['tmp_name']);
	} else {
		echo 'Er is geen geldige afbeelding geupload!';
		die();
	}
	if(imagesx($imageHandle) > 0){
		ini_set("max_execution_time", "120");
		include('CreateZipFile.php');
		
		if(trim($_POST['width']) != '' && ctype_digit($_POST['width'])){
			$blockWidth = $_POST['width'];
		} else {
			$blockWidth = 20;
		}
		if(trim($_POST['height']) != '' && ctype_digit($_POST['height'])){
			$blockHeight = $_POST['height'];
		} else {
			$blockHeight = 20;
		}
		if($blockHeight < 20){
			$blockHeight = 20;
		}
		if($blockWidth < 20){
			$blockWidth = 20;
		}
		
		$imgWidth = imagesx($imageHandle);
		$imgHeight = imagesy($imageHandle);
		$hSteps = ceil($imgWidth / $blockWidth);
		$vSteps = ceil($imgHeight / $blockHeight);
		for($i = 0; $i < $vSteps; $i++){
			for($j = 0; $j < $hSteps; $j++){
				$newImg = imagecreatetruecolor($blockWidth, $blockHeight);
				imagecopyresampled($newImg, $imageHandle, 0, 0, ($j * $blockWidth) + 1, ($i * $blockHeight) + 1, $blockWidth, $blockHeight, $blockWidth, $blockHeight);
				imagejpeg($newImg, 'slicedImages/' . $file_basename . '_' . $i . '_' . $j . '.jpg', 100);
				imagedestroy($newImg);
			} // end inner for-loop
		} // end main for-loop
		
		$createZip = new createDirZip;
		$createZip->get_files_from_folder('slicedImages/', '');
		$fileName = 'zip/' . $file_basename . '.zip';
		$fd = fopen ($fileName, 'wb');
		$out = fwrite ($fd, $createZip->getZippedfile());
		fclose ($fd);
 
		$createZip->forceDownload($fileName);
		@unlink($fileName);
       
      define('PATH', 'slicedImages/');
       
      function destroy($dir) {
          $mydir = opendir($dir);
          while(false !== ($file = readdir($mydir))) {
              if($file != "." && $file != "..") {
                  chmod($dir.$file, 0777);
                  if(is_dir($dir.$file)) {
                      chdir('.');
                      destroy($dir.$file.'/');
                      rmdir($dir.$file) or DIE("couldn't delete $dir$file<br />");
                  }
                  else
                      unlink($dir.$file) or DIE("couldn't delete $dir$file<br />");
              }
          }
          closedir($mydir);
      }
      destroy(PATH);
      echo 'all done.'; 



	}
} else {


?>
<html>
	<head>
		<title>PHP image slicer</title>
	</head>
	<body>
		<form name="selectImage" method="post" action="imageslicer.php" enctype="multipart/form-data">
			Bestand: <input type="file" name="image1" /><br />
			Breedte: <input type="text" name="width" value="20" /><br />
			Hoogte: <input type="text" name="height" value="20"<br />			
			<input type="submit" name="submit" value="Slice" />
		</form>
	</body>
</html>

<?php } ?>

Als je nog op- of aanmerkingen hebt dan hoor ik het graag? Ook als je graag nog een stukje extra functionaliteit wilt, laat het me dan even weten. En ik hoop dat dit je een hoop moeite kan besparen!

EDIT: Ik heb een kleine beperking ingevoerd. Geuploade afbeeldingen mogen maximaal 1440 * 1440 px zijn en de blokgrootte is minimaal 20 * 20. Dit in verband met eventuele extreme geheugenproblemen. Geldige bestandsformaten: .jpg, .jpeg, .png en .gif . BMP wordt niet ondersteunt door de GD-lib en derhalve ook niet door mijn script.

(Ik heb gebruik gemaakt van de zip-file class van Rochak Chauhan)
 
Laatst bewerkt:
Nou, ik ben er even druk mee geweest, maar ik heb een script voor je af!

Op: http://www.specialwebservice.nl/imageSlicer/imageslicer.php

Kun je een afbeelding ingeven, de hoogte van een 'blokje' en de breedte van een 'blokje' en dan krijg je een zip-file met alle 'blokjes' van mij terug! :D

Voor degenen die mijn code nog willen zien:

CreateZipFile.php:

PHP:
<?php

/**
 * Class to dynamically create a zip file (archive)
 *
 * @author Rochak Chauhan
 */

class createZip  {  

	public $compressedData = array(); 
	public $centralDirectory = array(); // central directory   
	public $endOfCentralDirectory = "\x50\x4b\x05\x06\x00\x00\x00\x00"; //end of Central directory record
	public $oldOffset = 0;

	/**
	 * Function to create the directory where the file(s) will be unzipped
	 *
	 * @param $directoryName string 
	 *
	 */
	
	public function addDirectory($directoryName) {
		$directoryName = str_replace("\\", "/", $directoryName);  

		$feedArrayRow = "\x50\x4b\x03\x04";
		$feedArrayRow .= "\x0a\x00";    
		$feedArrayRow .= "\x00\x00";    
		$feedArrayRow .= "\x00\x00";    
		$feedArrayRow .= "\x00\x00\x00\x00"; 

		$feedArrayRow .= pack("V",0); 
		$feedArrayRow .= pack("V",0); 
		$feedArrayRow .= pack("V",0); 
		$feedArrayRow .= pack("v", strlen($directoryName) ); 
		$feedArrayRow .= pack("v", 0 ); 
		$feedArrayRow .= $directoryName;  

		$feedArrayRow .= pack("V",0); 
		$feedArrayRow .= pack("V",0); 
		$feedArrayRow .= pack("V",0); 

		$this -> compressedData[] = $feedArrayRow;
		
		$newOffset = strlen(implode("", $this->compressedData));

		$addCentralRecord = "\x50\x4b\x01\x02";
		$addCentralRecord .="\x00\x00";    
		$addCentralRecord .="\x0a\x00";    
		$addCentralRecord .="\x00\x00";    
		$addCentralRecord .="\x00\x00";    
		$addCentralRecord .="\x00\x00\x00\x00"; 
		$addCentralRecord .= pack("V",0); 
		$addCentralRecord .= pack("V",0); 
		$addCentralRecord .= pack("V",0); 
		$addCentralRecord .= pack("v", strlen($directoryName) ); 
		$addCentralRecord .= pack("v", 0 ); 
		$addCentralRecord .= pack("v", 0 ); 
		$addCentralRecord .= pack("v", 0 ); 
		$addCentralRecord .= pack("v", 0 ); 
		$ext = "\x00\x00\x10\x00";
		$ext = "\xff\xff\xff\xff";  
		$addCentralRecord .= pack("V", 16 ); 

		$addCentralRecord .= pack("V", $this -> oldOffset ); 
		$this -> oldOffset = $newOffset;

		$addCentralRecord .= $directoryName;  

		$this -> centralDirectory[] = $addCentralRecord;  
	}	 
	
	/**
	 * Function to add file(s) to the specified directory in the archive 
	 *
	 * @param $directoryName string 
	 *
	 */
	
	public function addFile($data, $directoryName)   {
 
		$directoryName = str_replace("\\", "/", $directoryName);  
	
		$feedArrayRow = "\x50\x4b\x03\x04";
		$feedArrayRow .= "\x14\x00";    
		$feedArrayRow .= "\x00\x00";    
		$feedArrayRow .= "\x08\x00";    
		$feedArrayRow .= "\x00\x00\x00\x00"; 

		$uncompressedLength = strlen($data);  
		$compression = crc32($data);  
		$gzCompressedData = gzcompress($data);  
		$gzCompressedData = substr( substr($gzCompressedData, 0, strlen($gzCompressedData) - 4), 2); 
		$compressedLength = strlen($gzCompressedData);  
		$feedArrayRow .= pack("V",$compression); 
		$feedArrayRow .= pack("V",$compressedLength); 
		$feedArrayRow .= pack("V",$uncompressedLength); 
		$feedArrayRow .= pack("v", strlen($directoryName) ); 
		$feedArrayRow .= pack("v", 0 ); 
		$feedArrayRow .= $directoryName;  

		$feedArrayRow .= $gzCompressedData;  

		$feedArrayRow .= pack("V",$compression); 
		$feedArrayRow .= pack("V",$compressedLength); 
		$feedArrayRow .= pack("V",$uncompressedLength); 

		$this -> compressedData[] = $feedArrayRow;

		$newOffset = strlen(implode("", $this->compressedData));

		$addCentralRecord = "\x50\x4b\x01\x02";
		$addCentralRecord .="\x00\x00";    
		$addCentralRecord .="\x14\x00";    
		$addCentralRecord .="\x00\x00";    
		$addCentralRecord .="\x08\x00";    
		$addCentralRecord .="\x00\x00\x00\x00"; 
		$addCentralRecord .= pack("V",$compression); 
		$addCentralRecord .= pack("V",$compressedLength); 
		$addCentralRecord .= pack("V",$uncompressedLength); 
		$addCentralRecord .= pack("v", strlen($directoryName) ); 
		$addCentralRecord .= pack("v", 0 );
		$addCentralRecord .= pack("v", 0 );
		$addCentralRecord .= pack("v", 0 );
		$addCentralRecord .= pack("v", 0 );
		$addCentralRecord .= pack("V", 32 ); 

		$addCentralRecord .= pack("V", $this -> oldOffset ); 
		$this -> oldOffset = $newOffset;

		$addCentralRecord .= $directoryName;  

		$this -> centralDirectory[] = $addCentralRecord;  
	}

	/**
	 * Fucntion to return the zip file
	 *
	 * @return zipfile (archive)
	 */

	public function getZippedfile() { 

		$data = implode("", $this -> compressedData);  
		$controlDirectory = implode("", $this -> centralDirectory);  

		return   
			$data.  
			$controlDirectory.  
			$this -> endOfCentralDirectory.  
			pack("v", sizeof($this -> centralDirectory)).     
			pack("v", sizeof($this -> centralDirectory)).     
			pack("V", strlen($controlDirectory)).             
			pack("V", strlen($data)).                
			"\x00\x00";                             
	}

	/**
	 *
	 * Function to force the download of the archive as soon as it is created
	 *
	 * @param archiveName string - name of the created archive file
	 */

	public function forceDownload($archiveName) {
		$headerInfo = '';
		 
		if(ini_get('zlib.output_compression')) {
			ini_set('zlib.output_compression', 'Off');
		}

		// Security checks
		if( $archiveName == "" ) {
			echo "<html><title>Public Photo Directory - Download </title><body><BR><B>ERROR:</B> The download file was NOT SPECIFIED.</body></html>";
			exit;
		} 
		elseif ( ! file_exists( $archiveName ) ) {
			echo "<html><title>Public Photo Directory - Download </title><body><BR><B>ERROR:</B> File not found.</body></html>";
			exit;
		}

		header("Pragma: public");
		header("Expires: 0");
		header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
		header("Cache-Control: private",false);
		header("Content-Type: application/zip");
		header("Content-Disposition: attachment; filename=".basename($archiveName).";" );
		header("Content-Transfer-Encoding: binary");
		header("Content-Length: ".filesize($archiveName));
		readfile("$archiveName");
		
	 }

}

class createDirZip extends createZip {
 
	function get_files_from_folder($directory, $put_into) {
		if ($handle = opendir($directory)) {
			while (false !== ($file = readdir($handle))) {
				if (is_file($directory.$file)) {
					$fileContents = file_get_contents($directory.$file);
					$this->addFile($fileContents, $put_into.$file);
				} elseif ($file != '.' and $file != '..' and is_dir($directory.$file)) {
					$this->addDirectory($put_into.$file.'/');
					$this->get_files_from_folder($directory.$file.'/', $put_into.$file.'/');
				}
			}
		}
		closedir($handle);
	}
}



?>

imageslicer.php:

PHP:
<?php
if($_SERVER['REQUEST_METHOD'] == 'POST'){
	$_FILES['image1']['name'] = str_replace(' ', '_', $_FILES['image1']['name']);
	$file_basename = substr($_FILES['image1']['name'], 0, strripos($_FILES['image1']['name'], '.')); // strip extention
  $file_ext      = strtolower(substr($_FILES['image1']['name'], strripos($_FILES['image1']['name'], '.') + 1));
	if($file_ext == 'jpg' || $file_ext == 'jpeg'){
		$imageHandle = imagecreatefromjpeg($_FILES['image1']['tmp_name']);
	} else if($file_ext == 'png'){
		$imageHandle = imagecreatefrompng($_FILES['image1']['tmp_name']);
	} else if($file_ext == 'gif'){
		$imageHandle = imagecreatefromgif($_FILES['image1']['tmp_name']);
	} else {
		echo 'Er is geen geldige afbeelding geupload!';
		die();
	}
	if(imagesx($imageHandle) > 0){
		ini_set("max_execution_time", "120");
		include('CreateZipFile.php');
		
		if(trim($_POST['width']) != '' && ctype_digit($_POST['width'])){
			$blockWidth = $_POST['width'];
		} else {
			$blockWidth = 20;
		}
		if(trim($_POST['height']) != '' && ctype_digit($_POST['height'])){
			$blockHeight = $_POST['height'];
		} else {
			$blockHeight = 20;
		}
		if($blockHeight < 20){
			$blockHeight = 20;
		}
		if($blockWidth < 20){
			$blockWidth = 20;
		}
		
		$imgWidth = imagesx($imageHandle);
		$imgHeight = imagesy($imageHandle);
		$hSteps = ceil($imgWidth / $blockWidth);
		$vSteps = ceil($imgHeight / $blockHeight);
		for($i = 0; $i < $vSteps; $i++){
			for($j = 0; $j < $hSteps; $j++){
				$newImg = imagecreatetruecolor($blockWidth, $blockHeight);
				imagecopyresampled($newImg, $imageHandle, 0, 0, ($j * $blockWidth) + 1, ($i * $blockHeight) + 1, $blockWidth, $blockHeight, $blockWidth, $blockHeight);
				imagejpeg($newImg, 'slicedImages/' . $file_basename . '_' . $i . '_' . $j . '.jpg', 100);
				imagedestroy($newImg);
			} // end inner for-loop
		} // end main for-loop
		
		$createZip = new createDirZip;
		$createZip->get_files_from_folder('slicedImages/', '');
		$fileName = 'zip/' . $file_basename . '.zip';
		$fd = fopen ($fileName, 'wb');
		$out = fwrite ($fd, $createZip->getZippedfile());
		fclose ($fd);
 
		$createZip->forceDownload($fileName);
		@unlink($fileName);
       
      define('PATH', 'slicedImages/');
       
      function destroy($dir) {
          $mydir = opendir($dir);
          while(false !== ($file = readdir($mydir))) {
              if($file != "." && $file != "..") {
                  chmod($dir.$file, 0777);
                  if(is_dir($dir.$file)) {
                      chdir('.');
                      destroy($dir.$file.'/');
                      rmdir($dir.$file) or DIE("couldn't delete $dir$file<br />");
                  }
                  else
                      unlink($dir.$file) or DIE("couldn't delete $dir$file<br />");
              }
          }
          closedir($mydir);
      }
      destroy(PATH);
      echo 'all done.'; 



	}
} else {


?>
<html>
	<head>
		<title>PHP image slicer</title>
	</head>
	<body>
		<form name="selectImage" method="post" action="imageslicer.php" enctype="multipart/form-data">
			Bestand: <input type="file" name="image1" /><br />
			Breedte: <input type="text" name="width" value="20" /><br />
			Hoogte: <input type="text" name="height" value="20"<br />			
			<input type="submit" name="submit" value="Slice" />
		</form>
	</body>
</html>

<?php } ?>

Als je nog op- of aanmerkingen hebt dan hoor ik het graag? Ook als je graag nog een stukje extra functionaliteit wilt, laat het me dan even weten. En ik hoop dat dit je een hoop moeite kan besparen!

EDIT: Ik heb een kleine beperking ingevoerd. Geuploade afbeeldingen mogen maximaal 1440 * 1440 px zijn en de blokgrootte is minimaal 20 * 20. Dit in verband met eventuele extreme geheugenproblemen. Geldige bestandsformaten: .jpg, .jpeg, .png en .gif . BMP wordt niet ondersteunt door de GD-lib en derhalve ook niet door mijn script.

(Ik heb gebruik gemaakt van de zip-file class van Rochak Chauhan)

Hallo hr Booy!
Dit werkt geweldig!! En... de gang van zaken is heel duidelijk, iets waar het vaak aan schort. Ik vind het bijna onbeschaamd, maar je vroeg er om: inderdaad heb ik nog een wens. Is het mogelijk de naam van de stukjes en de telling ook in te voeren? Een doorlopende telling, bijv. 1-280, is zeer gewenst. Verder niets dan lof. Van de code snap ik uiteraard niets, gaat me echt boven de pet, ben blijven steken in html/javascript maar ben daar toch gelukkig mee!
 
Je bedoelt een extra input veld voor de naam van de stukjes?

En dat de telling automatisch doorloopt is geen probleem.
 
Is het zoals ie nu is goed? De nummering loopt nu van 0001 tot hoger en je hebt de mogelijk om een naam voor de afbeeldingen in te geven. Dat is tevens de naam van je zipfile.
 
Is het zoals ie nu is goed? De nummering loopt nu van 0001 tot hoger en je hebt de mogelijk om een naam voor de afbeeldingen in te geven. Dat is tevens de naam van je zipfile.

Meneer Booy, dit is het helemaal! Maarrrr...het moet natuurlijk niet alleen werken van af een server, de programma's moeten natuurlijk op mijn laptop staan. Beide listings heb ik gekopieerd naar een directory, de ene heet CreateZipFile.php, de andere PHP image slicer.html. Waarschijnlijk doe ik iets verkeerd, de html file laat het grootste deel van het php-deel zien (vanaf regel 16 de 3 laatste tekens t/m het einde van het php deel, ik zie geen aanduiding voor de naam van de slices. Wat precies is mijn fout? Gaarne bericht.
Kees de Oude.
 
Heb je een webserver geinstalleerd op je laptop?

Ik kan je aanraden om XAMPP of eventueel USB WebServer te installeren om PHP scripts uit te voeren.

Verder moet in de map waar imageslicer.php en CreateZipFile.php staan, een map 'slicedImages' staan en ook een map 'zip'.

De nieuwe code (CreateZipFile.php is nog onveranderd):

PHP:
<?php
if($_SERVER['REQUEST_METHOD'] == 'POST'){
	$_FILES['image1']['name'] = str_replace(' ', '_', $_FILES['image1']['name']);
	$file_basename = substr($_FILES['image1']['name'], 0, strripos($_FILES['image1']['name'], '.')); // strip extention
  $file_ext      = strtolower(substr($_FILES['image1']['name'], strripos($_FILES['image1']['name'], '.') + 1));
	if($file_ext == 'jpg' || $file_ext == 'jpeg'){
		$imageHandle = imagecreatefromjpeg($_FILES['image1']['tmp_name']);
	} else if($file_ext == 'png'){
		$imageHandle = imagecreatefrompng($_FILES['image1']['tmp_name']);
	} else if($file_ext == 'gif'){
		$imageHandle = imagecreatefromgif($_FILES['image1']['tmp_name']);
	} else {
		echo 'Er is geen geldige afbeelding geupload!';
		die();
	}
	if(imagesx($imageHandle) > 0 && imagesx($imageHandle) < 1440 && imagesy($imageHandle) < 1440) {
		ini_set("max_execution_time", "120");
		include('CreateZipFile.php');
		if(trim($_POST['width']) != '' && ctype_digit($_POST['width'])){
			$blockWidth = $_POST['width'];
		} else {
			$blockWidth = 20;
		}
		if(trim($_POST['height']) != '' && ctype_digit($_POST['height'])){
			$blockHeight = $_POST['height'];
		} else {
			$blockHeight = 20;
		}
		if($blockHeight < 20){
			$blockHeight = 20;
		}
		if($blockWidth < 20){
			$blockWidth = 20;
		}
		$n = 0;
		$imgWidth = imagesx($imageHandle);
		$imgHeight = imagesy($imageHandle);
		$hSteps = ceil($imgWidth / $blockWidth);
		$vSteps = ceil($imgHeight / $blockHeight);
		for($i = 0; $i < $vSteps; $i++){
			for($j = 0; $j < $hSteps; $j++){
				$n++;
				if($n < 1000){
					$displayN = '0' . $n;
				}
				if($n < 100){
					$displayN = '00' . $n;
				}
				if($n < 10){
					$displayN = '000' . $n;
				}
				if($n > 999){
					$displayN = $n;
				}
								
				$newImg = imagecreatetruecolor($blockWidth, $blockHeight);
				imagecopyresampled($newImg, $imageHandle, 0, 0, ($j * $blockWidth) + 1, ($i * $blockHeight) + 1, $blockWidth, $blockHeight, $blockWidth, $blockHeight);
				imagejpeg($newImg, 'slicedImages/' . $_POST['title'] . '_' . $displayN . '.jpg', 100);
				imagedestroy($newImg);
			} // end inner for-loop
		} // end main for-loop
		
		$createZip = new createDirZip;
		$createZip->get_files_from_folder('slicedImages/', '');
		$fileName = 'zip/' . $_POST['title'] . '.zip';
		$fd = fopen ($fileName, 'wb');
		$out = fwrite ($fd, $createZip->getZippedfile());
		fclose ($fd);
 
		$createZip->forceDownload($fileName);
		@unlink($fileName);
    
    
    
      define('PATH', 'slicedImages/');
       
      function destroy($dir) {
          $mydir = opendir($dir);
          while(false !== ($file = readdir($mydir))) {
              if($file != "." && $file != "..") {
                  chmod($dir.$file, 0777);
                  if(is_dir($dir.$file)) {
                      chdir('.');
                      destroy($dir.$file.'/');
                      rmdir($dir.$file) or DIE("couldn't delete $dir$file<br />");
                  }
                  else
                      unlink($dir.$file) or DIE("couldn't delete $dir$file<br />");
              }
          }
          closedir($mydir);
      }
     destroy(PATH);
       



	}
} else {


?>
<html>
	<head>
		<title>PHP image slicer</title>
	</head>
	<body>
		<form name="selectImage" method="post" action="imageslicer.php" enctype="multipart/form-data">
			Bestand: <input type="file" name="image1" /><br />
			Naam: <input type="text" name="title" value="slice" /><br />
			Breedte: <input type="text" name="width" value="20" /><br />
			Hoogte: <input type="text" name="height" value="20"<br />			
			<input type="submit" name="submit" value="Slice" />
		</form>
	</body>
</html>

<?php } ?>

En dan zou het moeten werken.
 
Heb je een webserver geinstalleerd op je laptop?

Ik kan je aanraden om XAMPP of eventueel USB WebServer te installeren om PHP scripts uit te voeren.

Verder moet in de map waar imageslicer.php en CreateZipFile.php staan, een map 'slicedImages' staan en ook een map 'zip'.

De nieuwe code (CreateZipFile.php is nog onveranderd):

PHP:
<?php
if($_SERVER['REQUEST_METHOD'] == 'POST'){
	$_FILES['image1']['name'] = str_replace(' ', '_', $_FILES['image1']['name']);
	$file_basename = substr($_FILES['image1']['name'], 0, strripos($_FILES['image1']['name'], '.')); // strip extention
  $file_ext      = strtolower(substr($_FILES['image1']['name'], strripos($_FILES['image1']['name'], '.') + 1));
	if($file_ext == 'jpg' || $file_ext == 'jpeg'){
		$imageHandle = imagecreatefromjpeg($_FILES['image1']['tmp_name']);
	} else if($file_ext == 'png'){
		$imageHandle = imagecreatefrompng($_FILES['image1']['tmp_name']);
	} else if($file_ext == 'gif'){
		$imageHandle = imagecreatefromgif($_FILES['image1']['tmp_name']);
	} else {
		echo 'Er is geen geldige afbeelding geupload!';
		die();
	}
	if(imagesx($imageHandle) > 0 && imagesx($imageHandle) < 1440 && imagesy($imageHandle) < 1440) {
		ini_set("max_execution_time", "120");
		include('CreateZipFile.php');
		if(trim($_POST['width']) != '' && ctype_digit($_POST['width'])){
			$blockWidth = $_POST['width'];
		} else {
			$blockWidth = 20;
		}
		if(trim($_POST['height']) != '' && ctype_digit($_POST['height'])){
			$blockHeight = $_POST['height'];
		} else {
			$blockHeight = 20;
		}
		if($blockHeight < 20){
			$blockHeight = 20;
		}
		if($blockWidth < 20){
			$blockWidth = 20;
		}
		$n = 0;
		$imgWidth = imagesx($imageHandle);
		$imgHeight = imagesy($imageHandle);
		$hSteps = ceil($imgWidth / $blockWidth);
		$vSteps = ceil($imgHeight / $blockHeight);
		for($i = 0; $i < $vSteps; $i++){
			for($j = 0; $j < $hSteps; $j++){
				$n++;
				if($n < 1000){
					$displayN = '0' . $n;
				}
				if($n < 100){
					$displayN = '00' . $n;
				}
				if($n < 10){
					$displayN = '000' . $n;
				}
				if($n > 999){
					$displayN = $n;
				}
								
				$newImg = imagecreatetruecolor($blockWidth, $blockHeight);
				imagecopyresampled($newImg, $imageHandle, 0, 0, ($j * $blockWidth) + 1, ($i * $blockHeight) + 1, $blockWidth, $blockHeight, $blockWidth, $blockHeight);
				imagejpeg($newImg, 'slicedImages/' . $_POST['title'] . '_' . $displayN . '.jpg', 100);
				imagedestroy($newImg);
			} // end inner for-loop
		} // end main for-loop
		
		$createZip = new createDirZip;
		$createZip->get_files_from_folder('slicedImages/', '');
		$fileName = 'zip/' . $_POST['title'] . '.zip';
		$fd = fopen ($fileName, 'wb');
		$out = fwrite ($fd, $createZip->getZippedfile());
		fclose ($fd);
 
		$createZip->forceDownload($fileName);
		@unlink($fileName);
    
    
    
      define('PATH', 'slicedImages/');
       
      function destroy($dir) {
          $mydir = opendir($dir);
          while(false !== ($file = readdir($mydir))) {
              if($file != "." && $file != "..") {
                  chmod($dir.$file, 0777);
                  if(is_dir($dir.$file)) {
                      chdir('.');
                      destroy($dir.$file.'/');
                      rmdir($dir.$file) or DIE("couldn't delete $dir$file<br />");
                  }
                  else
                      unlink($dir.$file) or DIE("couldn't delete $dir$file<br />");
              }
          }
          closedir($mydir);
      }
     destroy(PATH);
       



	}
} else {


?>
<html>
	<head>
		<title>PHP image slicer</title>
	</head>
	<body>
		<form name="selectImage" method="post" action="imageslicer.php" enctype="multipart/form-data">
			Bestand: <input type="file" name="image1" /><br />
			Naam: <input type="text" name="title" value="slice" /><br />
			Breedte: <input type="text" name="width" value="20" /><br />
			Hoogte: <input type="text" name="height" value="20"<br />			
			<input type="submit" name="submit" value="Slice" />
		</form>
	</body>
</html>

<?php } ?>

En dan zou het moeten werken.

Meneer Booy, fijn dat u zo veel moeite voor mij doet, jammer dat ik e.e.a. niet goed uitvoer, waardoor het op mijn laptop niet goed werkt, Nog even alles op een rijtje: ik heb geen server op mijn laptop, de programma's die ik schrijf (dat doe ik alleen voor het plezier van het maken) moeten werken op de laptop, dat is alles. Uw laatste versie heb ik in z'n geheel gekopieerd, php plus html en PHP image slicer.html genoemd. De genoemde subdirs heb ik aangemaakt. Als ik op PHP image slicer.html dubbelklik zie ik een deel van de php programmaregels boven de invoervakjes staan. Alle invoervakjes zijn aanwezig, na het invullen en klikken op 'slice' krijg ik te zien dat de webserver niet bereikbaar is. Als ik op de link in uw bericht klik gaat alles geweldig.
Ik neem aan dat de gang van zaken sterk wordt beïnvloed door mijn onkunde van dit soort ingewikkelcde zaken.
Kees de Oude.
 
Allereerst móet het bestand opgeslagen worden als .php . Dit is vereist omdat de code die tussen <?php ?> tags staat anders wordt gezien als HTML. Het is echter geen HTML. Het is PHP code die geparst moet worden door een PHP-server.

Het in stukjes verdelen van de afbeelding wordt gedaan door de server en ook het creeëren van de zip-file is een server-side actie.

Wat je dus kunt / moet doen voor het correct functioneren van het script is het volgende:

  • Installeer een server
  • Zet de bestanden en de mappen in de root
  • Voor het script uit

Dan zou het moeten werken. Maar het eenvoudigweg uitvoeren als HTML gaat niet werken. Als je nog meer informatie wilt over hoe je de bestanden nu lokaal aan de praat kunt krijgen kan ik je aanraden om die vraag nog even in het Webserver forum of het PHP-forum te stellen. Daar krijg je misschien nog meer info.
 
Allereerst móet het bestand opgeslagen worden als .php . Dit is vereist omdat de code die tussen <?php ?> tags staat anders wordt gezien als HTML. Het is echter geen HTML. Het is PHP code die geparst moet worden door een PHP-server.

Het in stukjes verdelen van de afbeelding wordt gedaan door de server en ook het creeëren van de zip-file is een server-side actie.

Wat je dus kunt / moet doen voor het correct functioneren van het script is het volgende:

  • Installeer een server
  • Zet de bestanden en de mappen in de root
  • Voor het script uit

Dan zou het moeten werken. Maar het eenvoudigweg uitvoeren als HTML gaat niet werken. Als je nog meer informatie wilt over hoe je de bestanden nu lokaal aan de praat kunt krijgen kan ik je aanraden om die vraag nog even in het Webserver forum of het PHP-forum te stellen. Daar krijg je misschien nog meer info.

OK meneer Booy. Ik zal de nodige stappen ondernemen. Bedankt voor alle moeite!
Kees de Oude
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan