2017-12-08 41 views
0

내 앱 사용자는 JPG 및 PNG 형식으로 여러 사진 (예 : 3000x2000)을 업로드합니다. 내 PHP 프로그램은 그 사진을 레이아웃하고 1 개의 큰 사진으로 결합해야합니다.PHP는 초대형 이미지 파일을 만듭니다

예를 들어, 사용자는 4 개의 사진 (p1.jpg, p2.jpg, p3.jpg, p4.jpg)을 업로드하며 각각 3000x2000입니다. , 전체 크기가 아래로 축소 할 수 있도록

+-----+-----+ (overall witdh = 6000, overall height = 4000) 
| p1 | p2 | 
+-----+-----+ 
| p3 | p4 | 
+-----+-----+ 

나는 각 이미지에 작은 (원래의 예를 들어 50 %)을 만들 수 있습니다 -이 같은 2 × 2 그리드 레이아웃에 4 개 개의 이미지를 배치 큰 이미지를 만들어야합니다 사용자가 8 개의 이미지 또는 16 개의 이미지를 업로드하면 전체 크기가 다시 크게 커집니다.

결과 이미지는 PHP에서 매우 높은 메모리를 소비하므로 제 질문은 최소한의 메모리 소비로 큰 이미지를 만드는 가장 좋은 방법입니다.

하나의 아이디어는 스트림을 사용하여 큰 데이터 파일을 청크로 처리하는 것입니다. 그래서 chunk-by-chunk 이미지 병합을 허용하는 솔루션/라이브러리가 있는지 궁금합니다.

+2

작업 대기열은 이러한 메모리 소비 프로세스에 좋은 아이디어가 될 것입니다 ... 이제는 앱의 기술 스택에 따라 달라집니다. –

+1

많은 메모리를 사용하고 이미지 변환 작업을 허용하는 백그라운드 작업자를 만듭니다. 미리 결정된 수의 작업자를 실행하기에 충분한 대기열을 보유하고 있으므로 작업자가 사용하는 메모리의 양을 어느 정도 제어 할 수 있습니다. 마지막으로해야 할 일은 웹 서버 스레드에서 이러한 종류의 작업을 실행하는 것입니다.이 작업은 병렬 적으로 제어되지 않는 것보다 훨씬 적습니다. – deceze

답변

0

하나의 큰 이미지를 업로드하는 대신 모든 이미지를 독립적으로 업로드 할 수 있지만 표시하거나 다운로드하는 동안 모든 업로드 된 이미지를 하나의 큰 이미지 레이아웃으로 변환하는 스크립트를 작성할 수 있다고 제안 할 수 있습니다.

이미지에 대한 특정 위치가있는 경우 캔버스 라이브러리 http://fabricjs.com/을 사용할 수 있습니다. 이 라이브러리를 사용하여 이미지를 사용자 정의하고 데이터베이스의 모든 이미지 위치를 저장 한 다음 나중에 해당 위치에 따라 이미지를 가져올 수 있습니다.