PHP'de Sunum Şekillerini Özelleştirme
Genel Bakış
Bu makale, Aspose.Slides içinde sunum şekillerini düzenleme noktaları ve geometri yolları aracılığıyla şekil geometrisini düzenleyerek nasıl özelleştirileceğini açıklıyor. GeometryPath ile mevcut şekilleri nasıl değiştirebileceğinizi, temel yol düzenleme işlemlerini nasıl gerçekleştirebileceğinizi, nokta ekleyip kaldırmayı ve güncellenmiş geometrinin şekle yeniden uygulanmasını gösterir.
Ayrıca, özel ve birleşik şekillerin nasıl oluşturulacağını, kavisli köşeli şekillerin nasıl inşa edileceğini, bir şekil geometrisinin kapalı olup olmadığının nasıl belirleneceğini ve ek geometri özelleştirme senaryoları için GeometryPath ile java.awt.Shape arasında nasıl dönüştürüleceğini gösterir.
Düzenleme Noktalarını Kullanarak Şekli Değiştirme
Bir kareyi düşünün. PowerPoint’te düzenleme noktalarını kullanarak şunları yapabilirsiniz
- karenin köşesini içeri ya da dışarı doğru hareket ettirmek
- bir köşe ya da noktanın eğriliğini belirlemek
- kareye yeni noktalar eklemek
- kare üzerindeki noktaları manipüle etmek, vb.
Özetle, tanımlanan görevleri herhangi bir şekil üzerinde gerçekleştirebilirsiniz. Düzenleme noktalarını kullanarak bir şekli değiştirebilir veya mevcut bir şekilden yeni bir şekil oluşturabilirsiniz.
Şekil Düzenleme İpuçları

PowerPoint şekillerini düzenleme noktaları aracılığıyla düzenlemeye başlamadan önce, şekillerle ilgili aşağıdaki noktalara göz atmak isteyebilirsiniz:
- Bir şekil (veya yolu) ya kapalı ya da açıktır.
- Bir şekil kapalı olduğunda bir başlangıç ya da bitiş noktasına sahip değildir. Şekil açık olduğunda bir başlangıç ve bitişi vardır.
- Tüm şekiller, birbirine çizgilerle bağlanan en az 2 tutama noktasından oluşur.
- Bir çizgi ya düz ya da kavisli olabilir. Tutama noktaları çizginin niteliğini belirler.
- Tutama noktaları köşe noktaları, düz noktalar veya yumuşak noktalar olarak bulunur:
- Bir köşe noktası, 2 düz çizginin bir açıyla birleştiği noktadır.
- Bir yumuşak nokta, 2 tutamaçının düz bir hat üzerinde bulunduğu ve çizgi segmentlerinin sorunsuz bir eğri ile birleştiği noktadır. Bu durumda, tüm tutamaçlar tutama noktasından eşit bir mesafede bulunur.
- Bir düz nokta, 2 tutamaçının düz bir hat üzerinde bulunduğu ve çizgi segmentlerinin bir eğriyle birleştiği noktadır. Bu durumda tutamaçların tutama noktasından eşit mesafede olmaları gerekmez.
- Tutama noktalarını (çizgi açılarını değiştiren) hareket ettirerek veya düzenleyerek bir şeklin görünümünü değiştirebilirsiniz.
PowerPoint şekillerini düzenleme noktalarıyla düzenlemek için Aspose.Slides, GeometryPath sınıfını sunar.
- Bir GeometryPath örneği, GeometryShape nesnesinin geometri yolunu temsil eder.
GeometryShapeörneğindenGeometryPathdeğerini almak için GeometryShape::getGeometryPaths metodunu kullanabilirsiniz.- Bir şekil için
GeometryPathayarlamak üzere bu yöntemleri kullanabilirsiniz: katı şekiller için GeometryShape::setGeometryPath ve birleşik şekiller için GeometryShape::setGeometryPaths. - Segment eklemek için GeometryPath altındaki yöntemleri kullanabilirsiniz.
- GeometryPath::setStroke ve GeometryPath::setFillMode yöntemlerini kullanarak bir geometri yolunun görünümünü ayarlayabilirsiniz.
- GeometryPath::getPathData yöntemini kullanarak bir
GeometryShape‘in geometri yolunu yol segmentleri dizisi olarak alabilirsiniz. - Ek şekil geometri özelleştirme seçeneklerine erişmek için GeometryPath öğesini java.awt.Shape öğesine dönüştürebilirsiniz.
- geometryPathToGraphicsPath ve graphicsPathToGeometryPath yöntemlerini (ShapeUtil sınıfından) kullanarak GeometryPath öğesini java.awt.Shape öğesine ve geri dönüştürebilirsiniz.
Basit Düzenleme İşlemleri
Bu PHP kodu size nasıl
Bir satır ekle bir yolun sonuna
Bir satır ekle bir yolun belirli bir konumuna:
Kübik Bezier eğrisi ekle bir yolun sonuna:
Kübik Bezier eğrisi ekle bir yolun belirli bir konumuna:
Kuadratik Bezier eğrisi ekle bir yolun sonuna:
Kuadratik Bezier eğrisi ekle bir yolun belirli bir konumuna:
Belirli bir yay ekle bir yola:
Mevcut şekli kapat bir yolda:
Sonraki nokta için konumu ayarla:
Belirli bir indeksindeki yol segmentini kaldır:
Bir Şekle Özel Noktalar Ekle
- GeometryShape sınıfının bir örneğini oluşturun ve ShapeType::Rectangle tipini ayarlayın.
- Şekilden bir GeometryPath sınıfı örneği alın.
- Yoldaki iki üst nokta arasına yeni bir nokta ekleyin.
- Yoldaki iki alt nokta arasına yeni bir nokta ekleyin.
- Yolu şekle uygulayın.
Bu PHP kodu, bir şekle özel noktalar nasıl eklenir gösterir:
$pres = new Presentation();
try {
$shape = $pres->getSlides()->get_Item(0)->getShapes()->addAutoShape(ShapeType::Rectangle, 100, 100, 200, 100);
$geometryPath = $shape->getGeometryPaths()[0];
$geometryPath->lineTo(100, 50, 1);
$geometryPath->lineTo(100, 50, 4);
$shape->setGeometryPath($geometryPath);
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}

Şekilden Noktaları Kaldırma
- GeometryShape sınıfının bir örneğini oluşturun ve ShapeType::Heart tipini ayarlayın.
- Şekilden bir GeometryPath sınıfı örneği alın.
- Yol için segmenti kaldırın.
- Yolu şekle uygulayın.
Bu PHP kodu, bir şekilden noktaların nasıl kaldırılacağını gösterir:
$pres = new Presentation();
try {
$shape = $pres->getSlides()->get_Item(0)->getShapes()->addAutoShape(ShapeType::Heart, 100, 100, 300, 300);
$path = $shape->getGeometryPaths()[0];
$path->removeAt(2);
$shape->setGeometryPath($path);
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}

Özel Bir Şekil Oluşturma
- Şekil için noktaları hesaplayın.
- GeometryPath sınıfının bir örneğini oluşturun.
- Yolu noktalarla doldurun.
- GeometryShape sınıfının bir örneğini oluşturun.
- Yolu şekle uygulayın.
Bu Java kodu, özel bir şekil nasıl oluşturulur gösterir:
$points = new Java("java.util.ArrayList");
$R = 100;
$r = 50;
$step = 72;
for($angle = -90; $angle < 270; $angle += $step) {
$radians = $angle * java("java.lang.Math")->PI / 180.0;
$x = $R * java("java.lang.Math")->cos($radians);
$y = $R * java("java.lang.Math")->sin($radians);
$points->add(new Point2DFloat($x + $R, $y + $R));
$radians = java("java.lang.Math")->PI * $angle . $step / 2 / 180.0;
$x = $r * java("java.lang.Math")->cos($radians);
$y = $r * java("java.lang.Math")->sin($radians);
$points->add(new Point2DFloat($x + $R, $y + $R));
}
$starPath = new GeometryPath();
$starPath->moveTo($points->get(0));
for($i = 1; $i < java_values($points->size()) ; $i++) {
$starPath->lineTo($points->get($i));
}
$starPath->closeFigure();
$pres = new Presentation();
try {
$shape = $pres->getSlides()->get_Item(0)->getShapes()->addAutoShape(ShapeType::Rectangle, 100, 100, $R * 2, $R * 2);
$shape->setGeometryPath($starPath);
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}

Bileşik Özel Şekil Oluşturma
- GeometryShape sınıfının bir örneğini oluşturun.
- GeometryPath sınıfının ilk örneğini oluşturun.
- GeometryPath sınıfının ikinci örneğini oluşturun.
- Yolları şekle uygulayın.
Bu PHP kodu, bir bileşik özel şekil nasıl oluşturulur gösterir:
$pres = new Presentation();
try {
$shape = $pres->getSlides()->get_Item(0)->getShapes()->addAutoShape(ShapeType::Rectangle, 100, 100, 200, 100);
$geometryPath0 = new GeometryPath();
$geometryPath0->moveTo(0, 0);
$geometryPath0->lineTo($shape->getWidth(), 0);
$geometryPath0->lineTo($shape->getWidth(), $shape->getHeight() / 3);
$geometryPath0->lineTo(0, $shape->getHeight() / 3);
$geometryPath0->closeFigure();
$geometryPath1 = new GeometryPath();
$geometryPath1->moveTo(0, $shape->getHeight() / 3 * 2);
$geometryPath1->lineTo($shape->getWidth(), $shape->getHeight() / 3 * 2);
$geometryPath1->lineTo($shape->getWidth(), $shape->getHeight());
$geometryPath1->lineTo(0, $shape->getHeight());
$geometryPath1->closeFigure();
$shape->setGeometryPaths(array($geometryPath0, $geometryPath1 ));
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}

Kavisli Köşeli Özel Şekil Oluşturma
Bu PHP kodu, içe doğru kavisli köşelere sahip özel bir şekil nasıl oluşturulacağını gösterir;
$shapeX = 20.0;
$shapeY = 20.0;
$shapeWidth = 300.0;
$shapeHeight = 200.0;
$leftTopSize = 50.0;
$rightTopSize = 20.0;
$rightBottomSize = 40.0;
$leftBottomSize = 10.0;
$pres = new Presentation();
try {
$childShape = $pres->getSlides()->get_Item(0)->getShapes()->addAutoShape(ShapeType::Custom, $shapeX, $shapeY, $shapeWidth, $shapeHeight);
$geometryPath = new GeometryPath();
$point1 = new Point2DFloat($leftTopSize, 0);
$point2 = new Point2DFloat($shapeWidth - $rightTopSize, 0);
$point3 = new Point2DFloat($shapeWidth, $shapeHeight - $rightBottomSize);
$point4 = new Point2DFloat($leftBottomSize, $shapeHeight);
$point5 = new Point2DFloat(0, $leftTopSize);
$geometryPath->moveTo($point1);
$geometryPath->lineTo($point2);
$geometryPath->arcTo($rightTopSize, $rightTopSize, 180, -90);
$geometryPath->lineTo($point3);
$geometryPath->arcTo($rightBottomSize, $rightBottomSize, -90, -90);
$geometryPath->lineTo($point4);
$geometryPath->arcTo($leftBottomSize, $leftBottomSize, 0, -90);
$geometryPath->lineTo($point5);
$geometryPath->arcTo($leftTopSize, $leftTopSize, 90, -90);
$geometryPath->closeFigure();
$childShape->setGeometryPath($geometryPath);
$pres->save("output.pptx", SaveFormat::Pptx);
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
Bir Şekil Geometrisinin Kapalı Olup Olmadığını Öğrenme
Kapalı bir şekil, tüm kenarları birbirine bağlanarak boşluk bırakmayan tek bir sınır oluşturan şekil olarak tanımlanır. Böyle bir şekil basit bir geometrik form ya da karmaşık bir özel kontur olabilir. Aşağıdaki kod örneği, bir şekil geometrisinin kapalı olup olmadığını nasıl kontrol edeceğinizi gösterir:
function isGeometryClosed($geometryShape)
{
$isClosed = null;
foreach ($geometryShape->getGeometryPaths() as $geometryPath) {
$dataLength = count(java_values($geometryPath->getPathData()));
if ($dataLength === 0) {
continue;
}
$lastSegment = java_values($geometryPath->getPathData())[$dataLength - 1];
$isClosed = $lastSegment->getPathCommand() === PathCommandType::Close;
if ($isClosed === false) {
return false;
}
}
return $isClosed === true;
}
GeometryPath’i java.awt.Shape’e Dönüştürme
- GeometryShape sınıfının bir örneğini oluşturun.
- java.awt.Shape sınıfının bir örneğini oluşturun.
- ShapeUtil kullanarak java.awt.Shape örneğini GeometryPath örneğine dönüştürün.
- Yolları şekle uygulayın.
Bu PHP kodu—yukarıdaki adımların bir uygulaması—GeometryPath‘i GraphicsPath‘e dönüştürme sürecini gösterir:
$pres = new Presentation();
try {
# Yeni bir şekil oluştur
$shape = $pres->getSlides()->get_Item(0)->getShapes()->addAutoShape(ShapeType::Rectangle, 100, 100, 300, 100);
# Şeklin geometri yolunu al
$originalPath = $shape->getGeometryPaths()[0];
$originalPath->setFillMode(PathFillModeType::None);
# Metinle yeni bir grafik yolu oluştur
$graphicsPath;
$font = new Font("Arial", Font->PLAIN, 40);
$text = "Text in shape";
$img = new BufferedImage(100, 100, BufferedImage->TYPE_INT_ARGB);
$g2 = $img->createGraphics();
try {
$glyphVector = $font->createGlyphVector($g2->getFontRenderContext(), $text);
$graphicsPath = $glyphVector->getOutline(20.0, -$glyphVector->getVisualBounds()->getY() + 10);
} finally {
$g2->dispose();
}
# Grafik yolunu geometri yoluna dönüştür
$textPath = ShapeUtil->graphicsPathToGeometryPath($graphicsPath);
$textPath->setFillMode(PathFillModeType::Normal);
# Yeni geometri yolu ve orijinal geometri yolunun kombinasyonunu şekle ayarla
$shape->setGeometryPaths(array($originalPath, $textPath ));
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}

FAQ
Geometriyi değiştirdikten sonra dolgu ve kenarlık ne olur?
Stil şekil ile kalır; sadece kontur değişir. Dolgu ve kenarlık otomatik olarak yeni geometriye uygulanır.
Özel bir şekli geometrisiyle birlikte nasıl doğru şekilde döndürürüm?
Şeklin setRotation metodunu kullanın; geometri, şeklin kendi koordinat sistemine bağlı olduğu için şekil ile birlikte döner.
Sonucu “kilitlemek” için özel bir şekli bir görüntüye dönüştürebilir miyim?
Evet. Gerekli slaytı bölgesini ya da şekli kendisini raster bir formata dışa aktarabilirsiniz; bu, karmaşık geometrilerle çalışmayı kolaylaştırır.