PHP में प्रस्तुति आकारों को अनुकूलित करें

अवलोकन

यह लेख Aspose.Slides में प्रस्तुति आकारों को संपादन बिंदुओं और ज्यामिति पथों के माध्यम से आकार ज्यामिति को संपादित करके अनुकूलित करने का तरीका समझाता है। यह दिखाता है कि GeometryPath के साथ काम करके मौजूदा आकारों को संशोधित करना, बुनियादी पथ संपादन कार्य करना, बिंदु जोड़ना या हटाना, और अद्यतन ज्यामिति को फिर से आकार पर लागू करना।

यह यह भी दर्शाता है कि कस्टम और सम्मिश्र आकार कैसे बनाएं, घुमावदार कोनों वाले आकार बनाएं, निर्धारित करें कि आकार ज्यामिति बंद है या नहीं, और अतिरिक्त ज्यामिति अनुकूलन परिदृश्यों के लिए GeometryPath और java.awt.Shape के बीच रूपांतरण कैसे करें।

संपादन बिंदुओं का उपयोग करके आकार बदलें

एक वर्ग पर विचार करें। PowerPoint में, संपादन बिंदुओं का उपयोग करके आप

  • वर्ग के कोने को अंदर या बाहर ले जा सकते हैं
  • कोने या बिंदु की वक्रता निर्दिष्ट कर सकते हैं
  • वर्ग में नए बिंदु जोड़ सकते हैं
  • वर्ग के बिंदुओं को हेर-फेर कर सकते हैं, आदि।

मूल रूप से, आप वर्णित कार्य किसी भी आकार पर कर सकते हैं। संपादन बिंदुओं का उपयोग करके आप किसी आकार को बदल सकते हैं या मौजूदा आकार से नया आकार बना सकते हैं।

आकार संपादन टिप्स

overview_image

PowerPoint आकारों को संपादन बिंदुओं के माध्यम से संपादित करना शुरू करने से पहले, आप इन बिंदुओं पर विचार करना चाह सकते हैं:

  • एक आकार (या उसका पथ) बंद या खुला हो सकता है।
  • जब आकार बंद होता है, तो उसमें प्रारम्भ या अंत बिंदु नहीं होता। जब आकार खुला होता है, तो उसमें एक शुरुआत और अंत होता है।
  • सभी आकार कम से कम 2 एंकर बिंदुओं से मिलकर बनते हैं जो लाइनों के द्वारा जुड़े होते हैं।
  • एक रेखा सीधे या वक्र हो सकती है। एंकर बिंदु रेखा की प्रकृति निर्धारित करते हैं।
  • एंकर बिंदु कोने के बिंदु, सीधी बिंदु, या सहज बिंदु के रूप में होते हैं:
    • कोने का बिंदु वह बिंदु है जहाँ दो सीधी रेखाएँ कोण पर मिलती हैं।
    • सहज बिंदु वह बिंदु है जहाँ दो हैंडल एक सीधी रेखा में होते हैं और रेखा के खंड एक सहज वक्र में मिलते हैं। इस स्थिति में, सभी हैंडल एंकर बिंदु से समान दूरी पर अलग होते हैं।
    • सीधा बिंदु वह बिंदु है जहाँ दो हैंडल एक सीधी रेखा में होते हैं और उस रेखा के खंड एक सहज वक्र में मिलते हैं। इस स्थिति में, हैंडल को एंकर बिंदु से समान दूरी पर होने की आवश्यकता नहीं है।
  • एंकर बिंदुओं को स्थानांतरित या संपादित करके (जो रेखाओं के कोण को बदलता है), आप आकार की दिखावट बदल सकते हैं।

PowerPoint आकारों को संपादन बिंदुओं के माध्यम से संपादित करने के लिए, Aspose.Slides GeometryPath क्लास प्रदान करता है।

  • एक GeometryPath उदाहरण GeometryShape वस्तु का ज्यामिति पथ दर्शाता है।
  • GeometryShape उदाहरण से GeometryPath प्राप्त करने के लिए, आप GeometryShape::getGeometryPaths मेथड का उपयोग कर सकते हैं।
  • किसी आकार के लिए GeometryPath सेट करने हेतु, आप इन मेथड्स का उपयोग कर सकते हैं: भूतिया आकार के लिए GeometryShape::setGeometryPath और समुच्चय आकार के लिए GeometryShape::setGeometryPaths
  • सेगमेंट जोड़ने के लिए, आप GeometryPath के तहत मेथड्स का उपयोग कर सकते हैं।
  • इन मेथड्स GeometryPath::setStroke और GeometryPath::setFillMode का उपयोग करके आप किसी ज्यामिति पथ की रूपरेखा निर्धारित कर सकते हैं।
  • इन मेथड GeometryPath::getPathData का उपयोग करके आप GeometryShape की ज्यामिति पथ को पथ खंडों की सरणी के रूप में प्राप्त कर सकते हैं।
  • अतिरिक्त आकार ज्यामिति अनुकूलन विकल्पों तक पहुंचने के लिए, आप GeometryPath को java.awt.Shape में परिवर्तित कर सकते हैं।
  • इन मेथड्स geometryPathToGraphicsPath और graphicsPathToGeometryPath ( ShapeUtil क्लास से) का उपयोग करके आप GeometryPath को java.awt.Shape में आगे‑पीछे रूपांतरित कर सकते हैं।

सरल संपादन संचालन

यह PHP कोड आपको दर्शाता है कि कैसे

एक रेखा जोड़ें पथ के अंत में


एक रेखा जोड़ें पथ पर निर्दिष्ट स्थिति में:


एक क्यूबिक बीज़ियर वक्र जोड़ें पथ के अंत में:


एक क्यूबिक बीज़ियर वक्र जोड़ें पथ पर निर्दिष्ट स्थिति में:


एक क्वाड्रेटिक बीज़ियर वक्र जोड़ें पथ के अंत में:


एक क्वाड्रेटिक बीज़ियर वक्र जोड़ें पथ पर निर्दिष्ट स्थिति में:


एक दी गई चाप जोड़ें पथ में:


वर्तमान आकृति बंद करें पथ की:


अगले बिंदु के लिए स्थिति सेट करें:


एक दिए गए अनुक्रम में पथ खंड हटाएं:


आकार में कस्टम बिंदु जोड़ें

  1. GeometryShape क्लास का एक उदाहरण बनाएं और [ShapeType::Rectangle] प्रकार सेट करें।
  2. आकार से GeometryPath क्लास का एक उदाहरण प्राप्त करें।
  3. पथ पर दो शीर्ष बिंदुओं के बीच एक नया बिंदु जोड़ें।
  4. पथ पर दो निचले बिंदुओं के बीच एक नया बिंदु जोड़ें।
  5. पथ को आकार पर लागू करें।

यह PHP कोड आपको दिखाता है कि कैसे आकार में कस्टम बिंदु जोड़ें:

  $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();
    }
  }

example1_image

आकार से बिंदु हटाएँ

  1. GeometryShape क्लास का एक उदाहरण बनाएं और [ShapeType::Heart] प्रकार सेट करें।
  2. आकार से GeometryPath क्लास का एक उदाहरण प्राप्त करें।
  3. पथ का खंड हटाएं।
  4. पथ को आकार पर लागू करें।

यह PHP कोड आपको दिखाता है कि कैसे आकार से बिंदु हटाएँ:

  $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();
    }
  }

example2_image

कस्टम आकार बनाएं

  1. आकार के बिंदुओं की गणना करें।
  2. GeometryPath क्लास का एक उदाहरण बनाएं।
  3. बिंदुओं के साथ पथ को भरें।
  4. GeometryShape क्लास का एक उदाहरण बनाएं।
  5. पथ को आकार पर लागू करें।

यह Java कोड आपको दिखाता है कि कैसे कस्टम आकार बनाएं:

  $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();
    }
  }

example3_image

समुच्चय कस्टम आकार बनाएं

  1. GeometryShape क्लास का एक उदाहरण बनाएं।
  2. GeometryPath क्लास का पहला उदाहरण बनाएं।
  3. GeometryPath क्लास का दूसरा उदाहरण बनाएं।
  4. पथों को आकार पर लागू करें।

यह PHP कोड आपको समुच्चय कस्टम आकार बनाने दिखाता है:

  $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();
    }
  }

example4_image

वक्र कोनों के साथ कस्टम आकार बनाएं

यह PHP कोड आपको दिखाता है कि कैसे वक्र कोनों (भीतर की ओर) के साथ कस्टम आकार बनाएं;

  $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();
    }
  }

जांचें कि क्या आकार ज्यामिति बंद है

एक बंद आकार वह है जहाँ सभी पक्ष जुड़े होते हैं, जिससे कोई अंतराल के बिना एकल सीमा बनती है। ऐसा आकार साधारण ज्यामितीय रूप या जटिल कस्टम रूपरेखा हो सकता है। नीचे दिया गया कोड उदाहरण दिखाता है कि कैसे जांचें कि आकार की ज्यामिति बंद है या नहीं:

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 को java.awt.Shape में बदलें

  1. GeometryShape क्लास का एक उदाहरण बनाएं।
  2. java.awt.Shape क्लास का एक उदाहरण बनाएं।
  3. ShapeUtil का उपयोग करके [java.awt.Shape] उदाहरण को [GeometryPath] उदाहरण में परिवर्तित करें।
  4. पथों को आकार पर लागू करें।

यह PHP कोड—ऊपर बताए गए चरणों का कार्यान्वयन—GeometryPath से GraphicsPath रूपांतरण प्रक्रिया दिखाता है:

  $pres = new Presentation();
  try {
    # नया आकार बनाएं
    $shape = $pres->getSlides()->get_Item(0)->getShapes()->addAutoShape(ShapeType::Rectangle, 100, 100, 300, 100);
    # आकार का ज्यामिति पथ प्राप्त करें
    $originalPath = $shape->getGeometryPaths()[0];
    $originalPath->setFillMode(PathFillModeType::None);
    # पाठ के साथ नया ग्राफ़िक्स पथ बनाएं
    $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();
    }
    # ग्राफ़िक्स पथ को ज्यामिति पथ में परिवर्तित करें
    $textPath = ShapeUtil->graphicsPathToGeometryPath($graphicsPath);
    $textPath->setFillMode(PathFillModeType::Normal);
    # आकार पर नया ज्यामिति पथ और मूल ज्यामिति पथ का संयोजन सेट करें
    $shape->setGeometryPaths(array($originalPath, $textPath ));
  } finally {
    if (!java_is_null($pres)) {
      $pres->dispose();
    }
  }

example5_image

अक्सर पूछे जाने वाले प्रश्न

जब ज्यामिति बदलने के बाद भराव और बाहरी रूपरेखा क्या होगा?

स्टाइल आकार के साथ ही रहता है; केवल रूपरेखा बदलती है। भराव और सीमांकन स्वचालित रूप से नई ज्यामिति पर लागू हो जाते हैं।

मैं कैसे कस्टम आकार को उसकी ज्यामिति के साथ सही ढंग से घुमा सकता हूँ?

आकार की setRotation मेथड का उपयोग करें; क्योंकि ज्यामिति आकार के अपने निर्देशांक प्रणाली से बंधी होती है, इसलिए वह आकार के साथ घुमती है।

क्या मैं कस्टम आकार को एक छवि में बदल सकता हूँ ताकि परिणाम को “लॉक इन” किया जा सके?

हाँ। आवश्यक slide क्षेत्र या स्वयं shape को रास्टर स्वरूप में निर्यात करें; यह जटिल ज्यामितियों के साथ आगे के कार्य को सरल बनाता है।