Saya mencoba mengidentifikasi lebar persegi panjang berwarna di dalam gambar. Untuk penanganan gambar saya menggunakan Imagick untuk PHP.
Idenya adalah untuk mengubah gambar menjadi txt dan mencari txt ini dengan regex untuk semua piksel yang memiliki warna tertentu (#00FF00).
Berikut adalah contoh tampilan txt tersebut (kutipan dimulai dari piksel kolom 0 baris 83):
0,83: (255,255,255,1) #FFFFFF graya(255,1)
1,83: (255,255,255,1) #FFFFFF graya(255,1)
2,83: (255,255,255,1) #FFFFFF graya(255,1)
3,83: (0,255,0,1) #00FF00 graya(0,1)
4,83: (0,255,0,1) #00FF00 graya(0,1)
5,83: (0,255,0,1) #00FF00 graya(0,1)
6,83: (255,255,255,1) #FFFFFF graya(255,1)
7,83: (255,255,255,1) #FFFFFF graya(255,1)
8,83: (255,255,255,1) #FFFFFF graya(255,1)
0,84: (255,255,255,1) #FFFFFF graya(255,1)
1,84: (255,255,255,1) #FFFFFF graya(255,1)
2,84: (255,255,255,1) #FFFFFF graya(255,1)
3,84: (0,255,0,1) #00FF00 graya(0,1)
4,84: (0,255,0,1) #00FF00 graya(0,1)
5,84: (0,255,0,1) #00FF00 graya(0,1)
....
Ini Kode saya:
$canvasImg = new Imagick("_sources/passepartout/". $deviceName .".png");
$canvasImg->setFormat(txt);
preg_match_all("/(\\d+),(\\d+): \\(0,255,0,1\\)/is", $canvasImg, $colorMatchAll);
$firstPixelX = reset($colorMatch[1]);
$lastPixelX = end($colorMatch[1]);
$canvasWidth = $lastPixelX - $firstPixelX;
Sejauh ini berfungsi dengan baik, tetapi sangat lambat karena menemukan semua piksel dalam persegi panjang berwarna termasuk tinggi penuh sumbu y.
Sekarang karena saya hanya tertarik pada lebar persegi panjang #00FF00 ini, saya pikir akan lebih cepat jika regex hanya menemukan piksel pertama yaitu #00FF00 dan kemudian menelusuri baris piksel hingga akhir (baris 83 dalam contoh saya) dan berhenti segera setelah mencapai baris ke-84.
Apakah ada modifikasi yang dapat saya lakukan pada regex saya sehingga dapat melakukan apa yang saya cari?