Вы можете создать изображение, используя GD с размером кусочка головоломки.а затем скопируйте полное изображение на это изображение с правильной обрезкой, чтобы получить правильную часть изображения.
Затем вы можете просто динамически окрашивать каждую часть фрагмента, который вы хотите удалить, с помощью определенного цвета (например,# 0f0) и затем используйте imagecolorallocatealpha, чтобы сделать этот цвет прозрачным.Сделайте это для каждой части, и у вас будут свои части изображения на стороне сервера.
Однако, если бы я был там, я бы заранее создал обтравочную маску каждой головоломки в отдельном цвете.Это сделало бы два изображения для каждого соединения (одно с торчащим круглым соединителем, а другое - с круглым).Таким образом, вы можете просто скопировать эти маски на изображение, чтобы быстро создать красивые края.