diff --git a/app/code/Magento/MediaGalleryMetadata/Model/Png/Segment/WriteIptc.php b/app/code/Magento/MediaGalleryMetadata/Model/Png/Segment/WriteIptc.php index d40dbc13d2962..9025ba9363fde 100644 --- a/app/code/Magento/MediaGalleryMetadata/Model/Png/Segment/WriteIptc.php +++ b/app/code/Magento/MediaGalleryMetadata/Model/Png/Segment/WriteIptc.php @@ -71,11 +71,9 @@ public function execute(FileInterface $file, MetadataInterface $metadata): FileI } if (empty($pngIptcSegments)) { - $segments[] = $this->createPngIptcSegment($metadata); - return $this->fileFactory->create([ 'path' => $file->getPath(), - 'segments' => $segments + 'segments' => $this->insertPngIptcSegment($segments, $this->createPngIptcSegment($metadata)) ]); } @@ -89,6 +87,24 @@ public function execute(FileInterface $file, MetadataInterface $metadata): FileI ]); } + /** + * Insert IPTC segment to image png segments before IEND chunk + * + * @param SegmentInterface[] $segments + * @param SegmentInterface $iptcSegment + * @return SegmentInterface[] + */ + private function insertPngIptcSegment(array $segments, SegmentInterface $iptcSegment): array + { + $iendSegmentIndex = count($segments) - 1; + + return array_merge( + array_slice($segments, 0, $iendSegmentIndex), + [$iptcSegment], + array_slice($segments, $iendSegmentIndex) + ); + } + /** * Create new zTXt segment with metadata * diff --git a/app/code/Magento/MediaGalleryMetadata/Model/Png/Segment/WriteXmp.php b/app/code/Magento/MediaGalleryMetadata/Model/Png/Segment/WriteXmp.php index 292a52322d621..f03482ecf6054 100644 --- a/app/code/Magento/MediaGalleryMetadata/Model/Png/Segment/WriteXmp.php +++ b/app/code/Magento/MediaGalleryMetadata/Model/Png/Segment/WriteXmp.php @@ -97,7 +97,7 @@ public function execute(FileInterface $file, MetadataInterface $metadata): FileI } /** - * Insert XMP segment to image png segments (at position 1) + * Insert XMP segment to image png segments before IEND chunk * * @param SegmentInterface[] $segments * @param SegmentInterface $xmpSegment @@ -105,7 +105,12 @@ public function execute(FileInterface $file, MetadataInterface $metadata): FileI */ private function insertPngXmpSegment(array $segments, SegmentInterface $xmpSegment): array { - return array_merge(array_slice($segments, 0, 2), [$xmpSegment], array_slice($segments, 2)); + $iendSegmentIndex = count($segments) - 1; + return array_merge( + array_slice($segments, 0, $iendSegmentIndex), + [$xmpSegment], + array_slice($segments, $iendSegmentIndex) + ); } /**