PHP တွင် ImpoPenPolygon () သည် Polygon လိုင်းများကိုဖွင့်ရန်အသုံးပြုနိုင်သည့်အလွန်လက်တွေ့ကျသောလုပ်ဆောင်ချက်တစ်ခုဖြစ်သည်။ သေးငယ်တဲ့အကြေးခွံတွေဆွဲတဲ့အခါဒီ function ဟာကောင်းမွန်စွာလုပ်ဆောင်သည်။ ဤဆောင်းပါးသည် Imageopenpolygon ၏ စွမ်းဆောင်ရည်ကိုအကြီးစားပုံဆွဲခြင်း၏စွမ်းဆောင်ရည်ကိုတိုးတက်စေရန်နည်းလမ်းအချို့ကိုလေ့လာလိမ့်မည်။
Imageopenpolygon () သည် များသောအားဖြင့်ရှုထောင့် , x2, Y2, y2 , ဤအချက်အချက်အလက်များကိုထုတ်လုပ်သည့်အခါ:
အချက်များအားလုံးကိုကြိုတင်ဖန်တီးရန်နှင့် Imageopenpolygon () ဟုခေါ်သည့်အခါပြောင်းလဲနေသောတွက်ချက်မှုများကိုရှောင်ပါ။
ခင်းကျင်းသည်ကျစ်လစ်သိပ်သည်းကြောင်းသေချာအောင်လုပ်ပါ။
// မအကြံပြုပါ:dynamicy ထုတ်ပေးရမှတ်
$points = [];
for ($i = 0; $i < 1000; $i++) {
$points[] = rand(0, 500);
$points[] = rand(0, 500);
}
imageopenpolygon($image, $points, count($points) / 2, $color);
// ထောက်ခံ:ကြိုတင်ပြင်ဆင်ထားသည့်ပြင်ဆင်ထားသောခင်းကျင်း
$points = generatePoints(); // generatePoints()ပြည်တွင်းရွှေ့ပြောင်းတစ်ခု optimized တ ဦး တည်းရှုထောင့်ခင်းကျင်းကိုပြန်သွားပါ
imageopenpolygon($image, $points, count($points) / 2, $color);
သင်၏ပုံသဏ် in ာန်တွင်ထပ်တူသို့မဟုတ်အလားတူ polygons များစွာရှိပါကစဉ်းစားပါ -
ထုတ်လုပ်ထားသောအစက်အပြောက်များကိုဖိုင် (သို့) မှတ်ဉာဏ် (ဥပမာ redis ကိုသုံးခြင်း) ကို cachees ။
အချိန်တိုင်းပြန်လည်ထူထောင်မည့်အစားသင်ဆွဲသည့်အခါတိုင်းဤအချက်အလက်များကိုပြန်လည်သုံးသပ်ပါ။
$cacheKey = 'polygon_points_large';
$points = apcu_fetch($cacheKey);
if ($points === false) {
$points = generateLargePolygonPoints();
apcu_store($cacheKey, $points);
}
imageopenpolygon($image, $points, count($points) / 2, $color);
မှတ်စု: apcu cache ကိုအသုံးပြုပြီး apcu extensions ကို enable လုပ်ဖို့ server ကိုသုံးတယ်။
အကြီးအကျယ်ဆွဲချိန်တွင်အသေးစိတ်အချက်အလက်များတိုင်းကိုတိကျစွာပြသရန်မလိုအပ်ပါ။ ရမှတ်များ၏အစု၏သင့်လျော်သောရိုးရှင်းလွယ်ကူစေရန်စွမ်းဆောင်ရည်တိုးတက်ကောင်းမွန်စေနိုင်ပါတယ်:
အချက်များအရေအတွက်ကိုလျှော့ချရန် decimation algorithm ကိုသုံးပါ။
နမူနာနှုန်းကို zoom level အပေါ် အခြေခံ. ဆုံးဖြတ်သည်။
ရိုးရှင်းသောအမှတ် simplification ဥပမာ:
function simplifyPoints(array $points, int $threshold = 5): array {
$simplified = [];
for ($i = 0; $i < count($points) - 2; $i += 2) {
if ($i % ($threshold * 2) == 0) {
$simplified[] = $points[$i];
$simplified[] = $points[$i + 1];
}
}
return $simplified;
}
$originalPoints = generateVeryLargePolygon();
$points = simplifyPoints($originalPoints, 10);
imageopenpolygon($image, $points, count($points) / 2, $color);
GD စာကြည့်တိုက်ကို PHP သို့တည်ဆောက်ပြီးအသုံးပြုရန်လွယ်ကူသော်လည်း GD ၏စွမ်းဆောင်ရည်သည်အလွန်အမင်းပုံဆွဲခြင်းလိုအပ်ချက်များအောက်တွင်မလုံလောက်နိုင်ပါ။ သုံးသပ်ကြည့်ပါ -
Imagemick ကို အသုံးပြုခြင်း (Imagemagick အပေါ် အခြေခံ. PHP extension) ကိုအသုံးပြုခြင်းသည်ကြီးမားသောဂရပ်ဖစ်အပြောင်းအလဲအတွက်ပိုမိုလုပ်ဆောင်သည်။
CLI Method နှင့်ပေါင်းစပ်။ အထူးပုံဆွဲအစီအစဉ်ကို (spell_exec () မှတဆင့် call isell_exec () မှတဆင့်ခေါ်ဆိုခြင်းကဲ့သို့သော) ။
ဥပမာများပုံရိပ်ကိုသုံးပါ။
$draw = new ImagickDraw();
$draw->setStrokeColor('black');
$draw->setFillColor('none');
$draw->setStrokeWidth(1);
$draw->polyline([
['x' => 10, 'y' => 10],
['x' => 100, 'y' => 30],
['x' => 50, 'y' => 100],
]);
$image = new Imagick();
$image->newImage(200, 200, "white");
$image->drawImage($draw);
$image->setImageFormat("png");
$image->writeImage('/var/www/html/uploads/output.png');
အကယ်. ပုံဆွဲခြင်းအကြောင်းအရာသည်အလွန်ကြီးမားသော်, ပတ်တူအပိုင်းအစများကိုအပိုင်းအစငယ်များကိုခွဲဝေယူရန်စဉ်းစားနိုင်သည်။
မြင်နိုင်သောဒေသများကိုသာတစ်ကြိမ်တွင်ရေးဆွဲထားသည်။
တစ်ကြိမ်မှတ်ဉာဏ် overhead ကိုလျှော့ချပါ။
function renderTile($startX, $startY, $width, $height, $points) {
$image = imagecreatetruecolor($width, $height);
$background = imagecolorallocate($image, 255, 255, 255);
imagefill($image, 0, 0, $background);
$color = imagecolorallocate($image, 0, 0, 0);
$tilePoints = filterPointsForTile($points, $startX, $startY, $width, $height);
if (!empty($tilePoints)) {
imageopenpolygon($image, $tilePoints, count($tilePoints) / 2, $color);
}
return $image;
}
ဤနည်းလမ်းအားဖြင့်ပုံဆွဲခြင်းလုပ်ဆောင်ချက်တစ်ခုစီတွင်ဝန်ထုပ်ဝန်ပိုးကိုအလွန်လျှော့ချနိုင်ပြီးစွမ်းဆောင်ရည်ကိုတိုးတက်အောင်လုပ်နိုင်သည်။