<?php
const IMAGE_HANDLERS = [
IMAGETYPE_JPEG => [
'load' => 'imagecreatefromjpeg',
'save' => 'imagejpeg',
'quality' => 100
],
IMAGETYPE_PNG => [
'load' => 'imagecreatefrompng',
'save' => 'imagepng',
'quality' => 0
],
IMAGETYPE_GIF => [
'load' => 'imagecreatefromgif',
'save' => 'imagegif'
]
];
/**
* @param $src - a valid file location
* @param $dest - a valid file target
* @param $targetWidth - desired output width
* @param $targetHeight - desired output height or null
*/
function createThumbnail($src, $dest, $targetWidth, $targetHeight = null) {
// 1. Load the image from the given $src
// - see if the file actually exists
// - check if it's of a valid image type
// - load the image resource
// get the type of the image
// we need the type to determine the correct loader
$type = exif_imagetype($src);
// if no valid type or no handler found -> exit
if (!$type || !IMAGE_HANDLERS[$type]) {
return null;
}
// load the image with the correct loader
$image = call_user_func(IMAGE_HANDLERS[$type]['load'], $src);
// no image found at supplied location -> exit
if (!$image) {
return null;
}
// 2. Create a thumbnail and resize the loaded $image
// - get the image dimensions
// - define the output size appropriately
// - create a thumbnail based on that size
// - set alpha transparency for GIFs and PNGs
// - draw the final thumbnail
// get original image width and height
$width = imagesx($image);
$height = imagesy($image);
// maintain aspect ratio when no height set
if ($targetHeight == null) {
// get width to height ratio
$ratio = $width / $height;
// if is portrait
// use ratio to scale height to fit in square
if ($width > $height) {
$targetHeight = floor($targetWidth / $ratio);
}
// if is landscape
// use ratio to scale width to fit in square
else {
$targetHeight = $targetWidth;
$targetWidth = floor($targetWidth * $ratio);
}
}
// create duplicate image based on calculated target size
$thumbnail = imagecreatetruecolor($targetWidth, $targetHeight);
// set transparency options for GIFs and PNGs
if ($type == IMAGETYPE_GIF || $type == IMAGETYPE_PNG) {
// make image transparent
imagecolortransparent(
$thumbnail,
imagecolorallocate($thumbnail, 0, 0, 0)
);
// additional settings for PNGs
if ($type == IMAGETYPE_PNG) {
imagealphablending($thumbnail, false);
imagesavealpha($thumbnail, true);
}
}
// copy entire source image to duplicate image and resize
imagecopyresampled(
$thumbnail,
$image,
0, 0, 0, 0,
$targetWidth, $targetHeight,
$width, $height
);
// 3. Save the $thumbnail to disk
// - call the correct save method
// - set the correct quality level
// save the duplicate version of the image to disk
return call_user_func(
IMAGE_HANDLERS[$type]['save'],
$thumbnail,
$dest,
IMAGE_HANDLERS[$type]['quality']
);
}
$file = 'image_protokoll.txt';
$current = file_get_contents($file);
$current ="Images die nicht geladen werden konnten:\n";
// Schreibt den Inhalt in die Datei zurück
file_put_contents($file, $current);
$pdo = new PDO('mysql:host=localhost;dbname=??', '??', '??');
$sql = "SELECT * FROM artikelbilder where ximage_server IS NULL or ximage_server = '' ";
foreach ($pdo->query($sql) as $row) {
$produktnr = $row['xproduktid'];
$imageURL = $row['ximage'];
//Manchmal ist in der url ein leerzeichen bei der Marke,dies muss abgefangen werden
$imageURL = str_replace(' ', '%20', $imageURL);
//get extension of image
$ext = pathinfo($imageURL, PATHINFO_EXTENSION);
$file = basename($imageURL,".".$ext);
$newfile = $produktnr."-".$file.".".$ext;
$newfilethum = $produktnr."-".$file."-thumb".".".$ext;
//Local path of image - where will we save the image
$downloadTo = fopen($newfile, 'wb');
//Download and save image
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $imageURL);
curl_setopt($ch, CURLOPT_FILE, $downloadTo);
curl_setopt($ch, CURLOPT_HEADER, 0);
$output = curl_exec($ch);
curl_close($ch);
//Verkleinern
createThumbnail($newfile, $newfilethum, 200);
//Update image_server Filename nur update wenn Datei auch tatsächlich besteht
if(!file_exists($newfilethum))
{
$file = 'image_protokoll.txt';
// Öffnet die Datei, um den vorhandenen Inhalt zu laden
$current = file_get_contents($file);
// Fügt eine neue Person zur Datei hinzu
$current .= $produktnr." - ".$imageURL."\n";
// Schreibt den Inhalt in die Datei zurück
file_put_contents($file, $current);
} else {
$statement = $pdo->prepare("UPDATE artikelbilder SET ximage_server= :image_server where xproduktid = :xproduktid and ximage = :imageURL");
$statement->execute(array('image_server'=> $newfilethum, 'imageURL' => $imageURL, 'xproduktid' =>$produktnr ));
}
}
?>