拾映還沒有正式上線,很多細節還在打磨,App Store 上暫時找不到。 上架時通知我 看看拾映的細節 →

拾映的細節:拼貼、編輯與分享

簡單說

拾映的細節(拼貼與編輯篇),收集了這款還沒上架 App Store 的 iPhone 照片 App 裡的小設計:拼貼怎麼存成真正的原況照片、不行時怎麼退回靜態圖,拼貼存到哪裡,編輯器怎麼處理邊框、HDR 和完整尺寸的原始照片,以及分享、格式副本和捷徑是怎麼做的。

最後更新:

拾映即將上架 App Store,現在還沒有上架。用照片做出點東西,要的是結果和你想的一樣:原況照片真的是原況,編輯存下來的就是你看到的,分享出去順順當當。下面是拾映拼貼、編輯器和分享背後的細節,先說做了什麼,再說為什麼這樣做。App 的其他部分見拾映的細節。

存一張會動的拼貼,會發生什麼?

拼貼裡有原況照片時,拼出來的圖可以動;只要配對驗證通過,存好的就是真正的原況,驗不過則存成普通靜態圖,要做到這一點比聽上去要難。

匯出面板有三檔,原況那一檔的小字會告訴你它怎麼動

做法: 拼貼裡有原況照片時,匯出面板有三檔:原況照片、一段影片、靜態圖片。原況照片那一檔下面的小字,跟著拼貼的動法變:一起動寫「長按會動起來」,接力動寫「長按依序動起來,帶聲音」,聚焦寫「長按會放大主角,播完回到拼貼」。

為什麼這樣做: 接力動和聚焦在長按時的表現不一樣,小字就是為了不讓你拿到成品之後才發現。

拼貼可以帶原況:存進照片,就是一張原況照片

做法: 拼貼裡有原況照片時,可以匯出成原況照片:一張靜態圖加一段影片,用同一個配對編號連在一起;兩樣東西在同一次儲存請求裡交給照片圖庫,所以只要通過下一張卡片說的驗證,圖庫裡存下來的就是原況照片。

為什麼這樣做: 原況照片是兩個檔案,靠那個配對編號才算一對。拾映寧可退成普通靜態圖,也不留下一張看著儲存成功、其實不是原況的拼貼。

儲存或分享之前,先驗一次這對檔案是不是真的原況

做法: 儲存或分享之前,拾映會請 iOS 把靜態圖和影片重新組成一張原況照片。iOS 認了這一對,才按原況交付。

為什麼這樣做: 組不回來還硬發,對方收到的是一張圖加一段看著毫不相干的影片,比只發一張靜態海報更糟。

驗不過,就存成普通靜態圖,不留假原況

做法: 這一對檔案驗不過時,拾映會把靜態圖裡的配對編號摘掉、刪掉配對影片,只存一張普通靜態圖。如果配對編號摘不掉,就報錯,不存假原況。

為什麼這樣做: 帶著配對編號的圖,會被系統當成只有一半的原況,另一半永遠不存在。剩下只有「落一張假原況」和「報錯」兩條路,拾映選報錯。

拼貼裡一張原況都沒有時,動態那幾檔自動變靜態圖

做法: 拼貼裡沒有原況照片時,要求匯出原況照片或一段影片,也會按靜態圖匯出。

為什麼這樣做: 沒有可動的素材,影片合成就沒法進行。退成靜態圖,把一次會失敗的匯出變成一次正常的匯出。

某一張原況的動態讀不出來,只有那一格是靜的

做法: 拼貼裡某一張照片的配對影片取不到時,只有那一格用靜態圖,其餘格子照常動;全都取不到時,整張拼貼會變成靜態圖。

為什麼這樣做: 少了一段,不該讓其餘格子的動態跟著白白丟掉。一段都沒有時,就沒有可動的東西了,整張才退一步。

選「一段影片」匯出的是 mp4,不冒充原況

做法: 「一段影片」匯出的是 mp4,沒有配對編號,iOS 不會把它當成半張原況。「我的成片」裡只留這件作品的海報靜態圖;影片本身去哪裡,由你當下選的去向決定,存進照片,或者分享出去。

為什麼這樣做: 「我的成片」把帶配對影片的項目當成可以長按播放的原況。把一段 mp4 放進去,失敗會發生在你點開它的那一刻,離出錯的地方很遠。

「沒能產生」和「已損壞」,說的是兩句不同的話

做法: 原況組不起來時,逾時和「這一對對不上」會給出不同的提示。逾時寫「沒能產生原況照片」和「原況照片準備逾時,請稍後再試。」;對不上寫「產生不了原況照片」和「原況已損壞,只能當靜態圖用。」拼貼最多等 45 秒;分享螢幕截圖海報預設等 8 秒。

為什麼這樣做: 以前一次逾時被說成作品壞了,你以為作品毀了,其實再點一下就好。45 秒也不是要一直等下去:你關掉面板、或背景時間用完,會立刻停下。這個數只是為了不把一張本來組得出來的原況判死。

存好的拼貼去了哪裡?儲存被打斷會怎樣?

下面是儲存拼貼的過程中發生的事。

所有拼貼都進同一個相簿:拾映成片

做法: 原況、影片、靜態圖三種拼貼,都存進同一個相簿「拾映成片」,也會出現在「我的成片」裡。它們不繼承來源照片所在的相簿,位置資訊留空。分享時也會先存一份到這裡;如果這一步存不進去,分享照樣繼續。

為什麼這樣做: 拼貼由好幾張照片合成,沒有唯一的位置,留空才是對的。這個相簿給拼貼一個自己的家,「我的成片」也就能在裡面找到它們。

點「儲存到照片」就能走,做完會提醒你

做法: 點了「儲存到照片」就可以關掉編輯器。匯出在 App 裡跑,不屬於哪一頁;切到別的 App,它仍會接著做。你離開至少 30 秒、而且允許了通知,做完(或失敗)時會收到一則通知。拾映不會借這個機會向你要通知權限。

為什麼這樣做: 點完儲存馬上切走,和點完等了 20 秒才切走,是兩種情形,所以 30 秒是從你離開 App 那一刻算起的。剛瞄一眼別的 App 就來一則通知,只是打擾;這樣的通知多了,你可能乾脆關掉通知,那樣連每日回顧提醒也一起沒了。

同一時間只跑一個儲存,連點兩下也只跑一次

做法: 同一時間只會跑一個拼貼儲存。同一批照片、同樣的設定,再點「儲存到照片」,也只跑一次。

為什麼這樣做: 一次匯出要取十幾張原始照片,再逐格合成,兩個一起跑會搶記憶體和影片編碼器。

有一張照片取不到,那一格畫成灰色,其餘照常匯出

做法: 某張原始照片取不到,比如還沒從 iCloud 下載下來,那一格會畫成中性灰,其餘部分照常匯出。一張都取不到時,匯出會失敗。拾映先按拼貼需要的尺寸去取這張照片,這可能要從 iCloud 取;取不到,再試一次,只問手機上已有的,3 秒沒有進展就放棄。

為什麼這樣做: 一格灰色,遠好過整張拼貼沒了。一張都畫不出來,確實沒有成品可言。

超長圖一格一格地畫,不是一次全攤開

做法: 超長圖拼貼不會一次把所有照片解出來,而是一格一格取、畫完就放。

為什麼這樣做: 在一次內部測量中,同一份測試素材,一次全攤開的記憶體峰值是 365 MB,分段畫是 12 MB。

匯出的影片位元率不低於 12 Mbps,畫布越大越高

做法: 拼貼影片的位元率按像素數換算:1080 × 1440 的畫布是 12 Mbps,最低不會低於這個數,最高不超過 64 Mbps。

為什麼這樣做: 畫布變大時,每個像素分到的資料量保持不變,大拼貼就不會比小拼貼看起來更「單薄」。上限用來控制檔案大小和編碼器的負擔。

回顧結束後遞上的拼貼,原況照片的影片必須已經在手機裡

做法: 一輪回顧結束後,拾映可能會提議用你剛看過的照片拼一張圖。原況照片要入選,它的影片部分必須已經在 iPhone 上。拾映不連網判斷這一點;10 秒內判不出來,就算不在手機上。

為什麼這樣做: 開了「最佳化 iPhone 儲存空間」,靜態圖在手機裡、影片還在 iCloud 是常有的事。不查這一步,遞上的拼貼裡那張原況長按不會動,播放還會轉 15 秒才放棄。從 iCloud 取原始照片,留給你在編輯器裡自己發起。

編輯器怎麼對待原況、濾鏡和你的原始照片?

編輯會改動你的照片,所以編輯器對「覆蓋什麼、告訴你什麼」很小心。

給原況加邊框,儲存出來就是靜態圖

做法: 原況照片加了邊框(編輯器裡的「邊框」),儲存結果一律是靜態圖,不再是原況。原始照片仍在你的圖庫裡,還原成原始照片,原況就回來了。

為什麼這樣做: 邊框會讓靜態圖變大,影片每一格畫面卻還按原來的大小畫,長按時影片就會被裁掉、縮在一角,或者露出雜色;直拍的原況,影片是橫著存的,更麻煩。這在真機上連著試了好幾版都沒繞過去,最後定成一條規則。

挑原況裡的任意一刻,帶著你的調整存成照片

做法: 在編輯器的原況頁裡,拖到想要的那一格,點「儲存為照片」,圖庫裡會多一張獨立的照片,目前的調整一起帶上,原來的原況保持不變。「設為主要照片」就在同一條影格帶的下面。

為什麼這樣做: 你按按鈕時,看的就是螢幕上那個樣子,所以存出來的這一格帶著同樣的裁切和調色。這一格由儲存原況時處理每一格畫面的同一個函式渲染,「先看後存」和「直接存」不會給出兩張不同的圖。

最近用過的濾鏡提到前面,不在原來的分類裡重複出現

做法: 濾鏡帶上,原始之後是你最近用過的幾個濾鏡(用過才有)。它們會從原來的分類裡搬走,同一個濾鏡在帶子上只出現一次。順序在你進入頁面時定好,點濾鏡的時候不會重新排。

為什麼這樣做: 同一個濾鏡出現兩次,你會想「怎麼又是它」。邊點邊重排也不好,手指底下那一格會當場跑掉。最小的一族也有 6 個濾鏡,不會有哪一族被搬空。

你自己的濾鏡,沒存過也有位置

做法: 「自訂濾鏡」這一段一直在濾鏡帶上,哪怕一個都沒存過。段尾是「存為濾鏡」,存好的濾鏡就放在這一段裡。

為什麼這樣做: 存濾鏡的入口就在這一段裡。這一段空了就消失的話,你第一次想存,就沒有地方可存。

拖滑桿的時候,預覽跟得上手指

做法: 拖動滑桿或拉直照片時,預覽一次只渲染一張,中間的值直接丟掉;一張渲完,馬上接著渲最新的那個值。所以畫面會跟著手指走,放手後會停在最新的那個值上。

為什麼這樣做: 在改進之前的一次 iPhone 上的內部測量裡,拖一下用了 211–623 毫秒,發出 7 到 21 次預覽請求,真正渲染的只有 0 到 2 次,因為每一次請求都被下一次取消了。結果就是拖著的時候畫面不動、放手才變,而渲染一張其實只要 1–73 毫秒。

做法: 儲存照片時,如果它的 HDR 那一層保不住,拾映不會悄悄存成普通的 SDR,而是先停下來問你,你同意了才存成 SDR。HDR 能保住的時候,什麼都不會問你。

為什麼這樣做: 以前可能出現悄悄降級:一張帶 HDR 層的照片只是旋轉或裁切了一下,存出來卻變成 SDR,介面還說「已儲存」。反過來,保不住就拒絕儲存也不對,因為你想編輯 HDR 照片。有代價的降級,應該先讓你確認。

編輯覆蓋照片之前,先確認拿到的是完整尺寸的原始檔

做法: 儲存編輯,是把新的像素寫回圖庫裡的這張照片。寫之前,拾映會確認 iOS 交回來的是完整尺寸的原始檔,不是一份小的替身。拿不準,就不寫。

為什麼這樣做: 儲存編輯是把新像素寫回既有照片的那條路,以前並沒有一道關卡問過交回來的這份夠不夠大。說不清的時候,什麼都不寫,比寫錯安全。

分享、格式副本和捷徑,怎麼和 iOS 的其他部分配合?

這幾處,是拾映和分享選單、捷徑、你的照片圖庫打交道的地方。

分享原況拼貼時,「隔空投送」仍然在

做法: 分享一張原況照片時,分享面板只交給 iOS 一件東西,所以「隔空投送」會出現在目標裡。隔空投送收到的是靜態圖檔案;訊息等其他目標收到的是原況照片本身。如果這一對檔案沒有組成原況,所有目標收到的都是靜態圖。

為什麼這樣做: 曾經有人測出「點分享沒有隔空投送」。原因是隔空投送只處理檔案,而原況照片物件不是檔案。後來試過交兩個檔案,讓對方的照片 App 合回原況,但分享面板裡會多出兩件東西,而且「對面會自動合成」這件事從沒在兩支 iPhone 之間驗證過,所以撤掉了。

分享出去的原況海報,是你編輯後的樣子

做法: 分享一張原況照片的海報,比如螢幕截圖後分享,海報裡是你正在看的這個版本,帶著你的編輯,不是沒編輯過的原始照片。如果做不出原況版,你拿到的仍是一張普通的靜態海報。

為什麼這樣做: iOS 可以交回「原始照片加一份調整說明、讓你自己重放」,也可以交回「已經烘焙好的成品」。拾映要的是成品,因為重放說明會匯出一張沒編輯過的原況,和你螢幕上的卡片對不上。

格式轉換會另存一份副本進「拾映轉換」,原始照片不動

做法: 照片換格式、影片轉原況、影片轉 GIF,都會產生一份新副本,原始檔不動。副本放進「拾映轉換」相簿,並盡量帶走拍攝日期、位置、收藏、原來所在的相簿和拾映標籤。

為什麼這樣做: 這三種轉換共用同一個「把副本寫進圖庫」的出口。影片轉原況和影片轉 GIF 各寫過自己的一份時,漏掉的恰好是最容易漏的:相簿歸屬、「登記新副本」這一步、成功後「進入轉換資料夾」的橫幅,而且都不報錯,成品只是靜靜地落在錯的地方。收成一條路,這類事就不容易再出現。

在捷徑裡,拾映的動作叫「拾映」,不叫「打開」

做法: 在「捷徑」App 裡,拾映的動作、新增捷徑時的預設名稱、搜尋框比對的名稱,都是「拾映」,「打開」只是參數的名稱,所以一行讀作「拾映 · 打開:那年今日」。搜「照片」「回顧」「相簿」也能找到它。

為什麼這樣做: 以前動作叫「打開」,用預設名稱存下來的捷徑就叫「打開」,混在幾十個裡認不出是誰的,搜 App 的名字也搜不到。多補的搜尋詞,是你最可能先想到的那幾個。

捷徑只能打開頁面,碰不到具體的哪一張照片

做法: 拾映開放給捷徑的動作,只負責打開某個頁面,共 12 個目的地,包括那年今日、隨機回顧、我的旅程、拼貼、做成卡片、我的成片、編輯照片等。會動到具體某一張照片的動作,比如「留下這一張」「放到一邊」,只存在於小工具上。

為什麼這樣做: 那些動作需要小工具手裡那份「它當時顯示的是哪一張」的憑據。捷徑打開的頁面,都是讓你自己去選照片,所以捷徑不會把某張照片的身分帶進 App。

分享選單裡的「壓縮」「拼貼」「轉原況」,只負責打開拾映

做法: 壓縮、拼貼、轉原況,會作為一行出現在系統分享選單裡。選 2 到 30 張照片時有拼貼,選一段影片時有轉原況。點這一行,分享選單裡不處理任何東西:面板收起,拾映打開。

為什麼這樣做: 真正的處理在拾映裡完成,那裡你看得見,也能接著往下做。擴充功能的畫面是透明的,所以你看到的只是分享面板收起、拾映打開。

接著看

拾映還沒上架,想在上架時收到郵件嗎?

拾映上架和有新功能時,我們給你發郵件提醒。不發垃圾郵件、不發廣告,隨時可以退訂。我們怎麼處理