-
Notifications
You must be signed in to change notification settings - Fork 0
/
upload.php
108 lines (92 loc) · 4.5 KB
/
upload.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
<?php
// Chemin où les images extraites seront stockées
$extractPath = "extracted_images";
if ($_SERVER["REQUEST_METHOD"] == "POST" && !empty($_FILES["zip_file"])) {
// Récupérer les valeurs des champs ajoutés
$widthImages = isset($_POST['width_images']) ? intval($_POST['width_images']) : 1;
$pixelsBetween = isset($_POST['pixels_between']) ? intval($_POST['pixels_between']) : 0;
$zipFile = $_FILES["zip_file"]["tmp_name"]; // Fichier ZIP téléchargé
$zipFileName = $_FILES["zip_file"]["name"];
$zipFileType = $_FILES["zip_file"]["type"];
$fileExtension = strtolower(pathinfo($zipFileName, PATHINFO_EXTENSION));
// Vérifier si le fichier est un zip par l'extension OU par le type MIME
if ($fileExtension == "zip" || $zipFileType == "application/zip") {
// Créer un nouvel objet ZipArchive
$zip = new ZipArchive;
if ($zip->open($zipFile) === TRUE) {
// Créer le dossier de destination s'il n'existe pas
if (!file_exists($extractPath)) {
mkdir($extractPath, 0777, true);
}
// Extraire le contenu du fichier ZIP
$zip->extractTo($extractPath);
$zip->close();
// Générer le collage (cette fonction est hypothétique et doit être implémentée)
$collageFileName = generateCollage($extractPath, $widthImages, $pixelsBetween);
// Télécharger le fichier collage
if (file_exists($collageFileName)) {
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="'.basename($collageFileName).'"');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($collageFileName));
readfile($collageFileName);
exit;
}
} else {
echo 'Échec de l\'ouverture du fichier ZIP.';
}
} else {
echo "Veuillez télécharger un fichier ZIP valide.";
}
} else {
echo "Aucun fichier n'a été téléchargé.";
}
// Fonction pour générer le collage à partir des images extraites
function generateCollage($extractPath, $widthImages, $pixelsBetween) {
// Dimensions pour chaque image dans le collage (ajuster selon les besoins)
$widthPerImage = 100;
$heightPerImage = 100;
// Obtenez tous les fichiers image du dossier extrait et ses sous-dossiers
$images = glob($extractPath . '/**/*.{jpg,jpeg,png,gif}', GLOB_BRACE);
// Calculez la taille du collage (ajuster selon les besoins)
// Pour simplifier, créons un collage carré
$numImages = count($images);
$collageSize = ceil($numImages / $widthImages);
$collageWidth = $widthImages * $widthPerImage + ($widthImages - 1) * $pixelsBetween;
$collageHeight = $collageSize * $heightPerImage + ($collageSize - 1) * $pixelsBetween;
// Créez une nouvelle image pour le collage
$collage = imagecreatetruecolor($collageWidth, $collageHeight);
$whiteBackground = imagecolorallocate($collage, 255, 255, 255);
imagefill($collage, 0, 0, $whiteBackground);
// Placez chaque image dans le collage
$x = $y = 0;
foreach ($images as $image) {
// Pour obtenir le chemin relatif par rapport à $extractPath
$relativePath = str_replace($extractPath . '/', '', $image);
$img = @imagecreatefromstring(file_get_contents($image));
if ($img) {
// Redimensionnez l'image (cela peut également perdre des proportions)
$resizedImg = imagescale($img, $widthPerImage, $heightPerImage);
imagecopy($collage, $resizedImg, $x, $y, 0, 0, $widthPerImage, $heightPerImage);
// Incrémentez la position x, et ajustez y si nécessaire
$x += $widthPerImage + $pixelsBetween;
if ($x >= $collageWidth) {
$x = 0;
$y += $heightPerImage + $pixelsBetween;
}
// Libérez la mémoire de l'image temporaire
imagedestroy($img);
imagedestroy($resizedImg);
}
}
// Sauvegardez le collage
$collageFileName = $extractPath . '/collage.png';
imagepng($collage, $collageFileName);
// Libérez la mémoire
imagedestroy($collage);
return $collageFileName;
}
?>