-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathget_color.php
More file actions
113 lines (103 loc) · 4.09 KB
/
get_color.php
File metadata and controls
113 lines (103 loc) · 4.09 KB
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
109
110
111
112
113
<?php
// CLONE PROJECT INI KE DIR CLOUD_MUSIC_PLAYER/API/
// Sertakan autoloader Composer
require_once 'vendor/autoload.php';
// hanya dan hanya jika file ini diakses dari cloud_music_player direktori
require_once __DIR__ . '/../../utils/utils.php';
// Gunakan namespace dari ColorThief
use ColorThief\ColorThief;
use ColorThief\Exception\NotReadableException;
function getDominantColors($imageUrl, $db): ?array
{
$palette = [];
$bg_color = '';
$text_color = '';
$error = '';
// Cek jika URL tidak kosong
if (!empty($imageUrl)) {
$imageUrl = filter_var($imageUrl, FILTER_SANITIZE_URL);
// gak perlu divalidasi, karena pakai dir local server
// Validasi URL
// if (filter_var($imageUrl, FILTER_VALIDATE_URL)) {
// } else {
// $error = 'Format URL yang Anda masukkan tidak valid.';
// }
try {
// Cek header gambar untuk memastikan itu benar-benar gambar
// getimagesize() juga bisa bekerja dengan URL
if (@getimagesize($imageUrl)) {
// Ambil 8 warna paling dominan dari gambar
$palette = ColorThief::getPalette($imageUrl, 2);
} else {
$error = 'URL yang dimasukkan bukan gambar yang valid.';
}
} catch (NotReadableException $e) {
$error = 'Gagal memuat gambar dari URL. Pastikan URL dapat diakses secara publik.';
} catch (Exception $e) {
$error = 'Terjadi kesalahan: ' . $e->getMessage();
}
}
if (!empty($error)) {
// wajar warning karena file ini akan diinclude.
log_message($error);
}
if (!empty($palette)) {
$index = 0;
foreach ($palette as $color) {
// Konversi array RGB [R, G, B] ke format string CSS rgb()
// $rgbCss = "rgb(" . $color[0] . ", " . $color[1] . ", " . $color[2] . ")";
// Konversi array RGB ke format HEX
$hex = sprintf("#%02x%02x%02x", $color[0], $color[1], $color[2]);
if ($index === 0) {
$bg_color = $hex;
} else {
$text_color = $hex;
}
$index++;
}
}
if (!empty(($bg_color)) && !empty($text_color)) {
$originalImageUrl = '';
if (strpos($imageUrl, '555/cybeat/false/image') != false) {
if (preg_match("#/stream/([^/]+)/#", $imageUrl, $matches)) {
$fileId = $matches[1];
$originalImageUrl = "https://drive.google.com/file/d/" . $fileId . "/view?usp=drive_link";
}
} else if (strpos($imageUrl, 'cdn.sibeux.my.id') != false) {
$rawUrl = parse_url($imageUrl, PHP_URL_PATH);
$originalImageUrl = "cdncloudflare" . $rawUrl;
} else {
$originalImageUrl = $imageUrl;
}
$stmt_dominant = $db->prepare(
"INSERT INTO dominant_colors (image_url, bg_color, text_color) VALUES (?, ?, ?)
-- Gunakan perintah INSERT ... ON DUPLICATE KEY UPDATE.
-- Perintah ini secara cerdas akan melakukan INSERT jika datanya baru, atau UPDATE jika datanya sudah ada.
-- Ini sering disebut operasi \"UPSERT\" (Update or Insert)
ON DUPLICATE KEY UPDATE
bg_color = VALUES(bg_color),
text_color = VALUES(text_color)"
);
// Type data: i = integer, s = string
$stmt_dominant->bind_param(
"sss",
$originalImageUrl,
$bg_color,
$text_color
);
if (!$stmt_dominant->execute()) {
// If failed, error will displayed di sini!
die("Error inserting dominant: " . $stmt_dominant->error);
}
$stmt_dominant->close();
log_message("[SUCCESS] Warna dominan berhasil disimpan untuk URL: " . $imageUrl);
// Kembalikan warna dalam format array asosiatif
return [
'bg_color' => $bg_color,
'text_color' => $text_color
];
} else {
log_message("[ERROR] Warna dominan tidak ditemukan untuk URL: " . $imageUrl);
return null;
}
}