Community影像github.com

手機螢幕置換

將手機照片轉換為可重複使用的模板,並以程式碼方式將任何圖像放置在螢幕上,無需圖像生成器。適用於製作新手機照片、新模板或檢查模板。

手機螢幕置換 是什麼?

這個 AI 技能可將真實手機照片中的螢幕區域完全替換為指定圖像,無需使用圖像生成器。它通過程式碼精確定位和變換圖像,支援 iPhone 的瀏海(notch)或動態島(Dynamic Island)。使用者可以提供照片,或由技能自動搜尋圖片。技能提供完整的模板建立流程,包括邊角偵測、邊緣追蹤、鏡頭變形校正、框架檢查和洩漏檢測。主要支援 iPhone 照片,不接受傾斜角度超過 25°、長寬比超過 1.2 倍或 Android 裝置的照片。技能包含詳細的品質檢查步驟,如分割視圖、洩漏熱圖、框架均勻性測量等,確保置換結果自然無瑕疵。適用於任何需要將自訂圖像「貼」到手機螢幕上的情境,例如產品展示、教學截圖或創意設計。

相容平台~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/onemanylov/phone-screen-swap/tree/HEAD/.claude/skills/phone-screen

Installed? Explore more 影像 skills: steipete/songsee, affaan-m/frontend-design, mattpocock/improve-codebase-architecture · View all 6 →

在你喜歡的 AI 中提問

開啟一個已預先載入此 Agent Skill 的新對話。

說明文件

手機螢幕置換 是做什麼的?

照片:$ARGUMENTS。如果沒有,請要求一張,或使用 find_photos.py 尋找。 手機的整個正面由程式碼替換:螢幕、黑色邊框以及瀏海或動態島。玻璃以外的照片部分保持不變。

對於已存在的模板,不需要此技能:python3 swap.py <image>。

新模板

使用:一張真實的 iPhone 照片,鏡頭對準螢幕。跳過:Android、傾斜超過 25°、一邊長度超過另一邊 1.2 倍(裁切會拒絕它們)。跳過手指或袖子遮住螢幕的照片: 因為沒有灰色邊框,會被塗滿。所有玻璃區域(包括反光)都是我們的。只有從照片外部進入的皮膚會保留下來。

P=<名稱,8 個字元,唯一>;D=templates/corners
mkdir -p out
# 1. 查看照片並讀取螢幕的大致邊角,TL、TR、BR、BL
python3 tools/slide_crop.py --q '<邊角>' <photo.jpg> templates/crop/$P.jpg       # 在裁切上印出邊角
# 2. 精確的直邊。如果 `live` 較低:R=34
python3 tools/slide_lines.py $P '<裁切上的邊角>' out/l.jpg                    # 在輸出結尾處有精煉的邊角
# 3. 輪廓:透視、鏡頭彎曲、半徑、玻璃輪廓
python3 tools/slide_trace.py $P '<邊角>' out/t.jpg $D/$P.json
# 4. 驗證未見過的貼合部分。務必查看圖片
python3 tools/slide_proof.py $P $D/$P.json out/$P-proof.jpg
# 5. 姿態,僅用於反射
python3 tools/slide_sheet.py $P $D/$P.pose.json init
# 6. 測量瀏海或動態島、狀態圖示、黑色區域
python3 tools/slide_check.py $P measure
# Recipe $D/$P.recipe.json:複製 a841f108(瀏海)或 f5dad639(動態島),然後設定 frame=$P、pose、corners 和測量到的選項
# 7. 將時間和圖示放置到這支手機的位置
python3 tools/slide_status.py $P init <從 measure 得到的行>;python3 tools/slide_status.py $P build
# 8. 建置和紅色測試
python3 tools/slide_check.py $P build
# 9. 洩漏熱圖
python3 tools/slide_check.py $P leak
# 10. 邊框寬度
python3 tools/slide_check.py $P frame

之後它就會變成一個模板:python3 swap.py <image> -t $P。

相信它之前先檢查

  1. out/$P-split.jpg: 照片、紅色、結果。紅色貼合,邊框終止於機殼,從機身向內的所有部分都是我們的。
  2. out/$P-leak.jpg: 黑色螢幕上的邊框,亮度以對數尺度顯示。任何發亮的東西都來自照片:切割處周圍的線條、斑點、反光。只有揚聲器和真正位於前方的物體可能會顯示。
  3. out/$P-top.jpg: 照片上切割處的綠色輪廓,圖示就定位。
  4. out/$P-zoom.jpg: 邊角和邊框,放大,與照片並列。
  5. 透過 swap.py 使用白色圖像的模板:深色頁面會隱藏不良的邊角和邊緣。
  6. out/$P-frame.jpg: 白色螢幕上的四個邊角。在下方邊框檢查通過之前,模板不算完成。

邊框檢查

黑色邊框是硬體,四周寬度一致。slide_check.py $P frame 在白色螢幕上建置,將其拉直,並測量每邊中間的黑色,單位為螢幕畫素(寬 591)。它會印出每邊的 ours 和 photo、差值以及判定:最多 4 px 為 OK,更多則為 FIX。 4 px 的限制是根據這些手機得出的:7.5 px 的差值很明顯,而 4 px 則不明顯。 如果新模板顯示 FIX:

  1. 再次執行 slide_trace.py:它會讀取可見的黑色並為每邊提供中位數(frame: 行)。
  2. 重建,然後再次執行 frame。
  3. 仍然是 FIX:比較 ours 和 photo。如果它們相符,則表示該邊的反光、機殼或手在照片中隱藏了邊框。如果不相符,則輪廓有誤:查看 -frame.jpg 和 -split.jpg。
  4. 如果無法收斂,則不要將模板標記為完成。說明哪一邊有問題,以及偏離了多少 px。 同時目視檢查 -frame.jpg:頂部和側邊應相符。 出貨的模板:f38fe44a 2.2、79186658 3.2 和 895d3ee8 3.8 通過。f5dad639 5.8、a841f108 6.2 和 14278a0b 8.5 未通過:它們的邊框保持最初建置的樣子。

設定

  • 黑色: floor,使邊框和切割處與照片相符。從 .003 開始,如果照片較暗則調低。build 會印出兩者。
  • 瀏海: 來自 measure 的值。根據綠色輪廓調整 cr,measure 讀取的值偏低。
  • 瀏海上方的揚聲器: grille=45。如果舊頁面的細線出現在瀏海周圍:gband=1。
  • 動態島: 其中心是硬體,位於 591 中的 295.5。如果 measure 顯示偏差超過 1 px,則表示某個明亮的東西吃掉了一邊:取乾淨的一邊,並透過中心鏡像。在鎖定畫面上,從有動態島的手機取得 x(時間 111,圖示 479)和從 measure 取得 y。
  • 動態島上方的揚聲器: 如果它位於玻璃輪廓內部,grille=45 只會恢復其浮雕效果。
  • 袖子遮住玻璃: sleeve=1,僅在 templates/grey/ 中有真實灰色邊框時使用(f38fe44a)。
  • 暗對暗: 當 720 個點中少於 400 個點上升時,slide_trace.py 會自動切換。請格外小心地檢查 -split。

運作原理

手機是剛性的,因此螢幕是一個帶有 iOS 連續圓角的矩形,透過透視和一個徑向鏡頭彎曲觀察。邊緣以對數亮度找到,因此暗對暗也能運作,並放在線性光線的中點。圖片繪製在拉直的照片上,然後隨著玻璃彎曲回來。

已知陷阱

  • 僅根據深色頁面進行判斷。
  • 用一種方式貼合卻用另一種方式檢查:檢查是貼合,驗證是剩餘的部分。
  • 直接在照片上畫直線:照片是彎曲的。它們只存在於拉直的照片上。
  • 在明亮螢幕上從外向內搜尋機殼邊緣:一塊布折疊起來看起來像機殼。從螢幕向外搜尋。

相關技能