Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

裁剪部分图片出错 #308

Open
wieniawski-lai opened this issue Jan 11, 2023 · 11 comments
Open

裁剪部分图片出错 #308

wieniawski-lai opened this issue Jan 11, 2023 · 11 comments

Comments

@wieniawski-lai
Copy link

这个页面

其中有这样一副图片
image

剪切到本地之后不能正确显示
image

我查了一下,是因为本地的assets里面的图片都不对,变成了这个样子
手把手教你编写一个简单的上位机-看过的都说好-95edfaf6ed665a4a78d2e0c74fb1c55f

在网页上是webp格式,剪切下来之后变成了svg格式,然后存下来的svg变成了一片白.

@wieniawski-lai
Copy link
Author

上面空的那一大片,其实是一张svg的图片,是maoxian存下来的一张图片,也就是剪切不对的原因.

@mika-cn
Copy link
Owner

mika-cn commented Jan 11, 2023

@wieniawski-lai

這個網站的圖片具有「懶加載」的機制,也就是說文章的圖片只有被瀏覽過(即處於可見區過)才會顯示圖片,沒有被瀏覽過的圖片,就會顯示一張佔位的空白圖片(即那張空白的 SVG 圖片)

MaoXian 只能裁剪處於當前狀態的一個網頁,所以你必須在裁剪之前,把文章從頭到尾瀏覽一遍(即從頭到位滾動一遍),讓真正的圖片都正常顯示後,才點擊裁剪,就能裁剪到真正的圖片,其他類似具有「懶加載」圖片的網址,也需要這樣裁剪。

這種「懶加載」圖片的情況比較常見。對於知乎這個網站,我建議你可以使用 「毛線助手」功能,並且訂閱公開的 Plan: 華人網站列表 (這個列表有包含了知乎網站的 Plan,可以處理你遇到的這個問題)。即當你使用「毛線助手」功能後,對於知乎這個網站,就可以直接裁剪,而不需要再從頭到尾用鼠標滾動一次,其實有時候你滾動速度太快,也會漏掉一些圖片,導致裁剪的不是想要的圖片。

後面我會把這個問題也加到「常見問題」頁面上,以幫助其他用戶。

@wieniawski-lai
Copy link
Author

  1. 从头到尾浏览一遍的方法,我已经试过了,确实可以解决问题.
  2. 我又试了毛线助手的解决办法,还是存在一样的问题,即剪切不完整.我做了以下工作
    a. 启动助手
    image
    b. 添加订阅并且更新
    image
    除了这写,我还需要做什么吗?

@wieniawski-lai
Copy link
Author

BTW, 似乎maoxian没有把视频的URL剪切下来.上面这个页面里面是有一个视频的
image
但是clip下来之后,这个视频的链接并没有
image
能不能把视频的URL也保存到md?

谢谢

@mika-cn
Copy link
Owner

mika-cn commented Jan 11, 2023

你這樣配置是可以的。按理你添加訂閱並且更新之後,刷新目標網頁,再裁剪應該是可以的。MaoXian 會根據「知乎專欄」的網址匹配到一個 Plan,並應用這個 Plan 的內容,即修正所有的佔位圖片。

目前知乎專欄這個 Plan 的版本是 20220207,有段時間沒有更新了,我晚上看看吧,看是不是知乎那邊更新了,而 Plan 還沒有修正。

@mika-cn
Copy link
Owner

mika-cn commented Jan 11, 2023

目前「保存爲 markdown 格式」,確實是不保存音頻和視頻,也沒有記錄其網址。緣由是 Markdown 並沒有表示音頻和視頻的語法。

不過你這麼一提,感覺用戶確實有這樣的需求。這個得考慮一下。

是下載下來然後,把資源表示爲一個本地連接呢? 還是說直接用遠程鏈接表示?

你有啥想法嗎?

@wieniawski-lai
Copy link
Author

目前「保存爲 markdown 格式」,確實是不保存音頻和視頻,也沒有記錄其網址。緣由是 Markdown 並沒有表示音頻和視頻的語法。

不過你這麼一提,感覺用戶確實有這樣的需求。這個得考慮一下。

是下載下來然後,把資源表示爲一個本地連接呢? 還是說直接用遠程鏈接表示?

你有啥想法嗎?

obsidian有一个median extend的插件,对于embedded video的处理办法是,在md里面写下下面的code

![](url of the video)

然后在ob的阅读模式,就能看到插入的视频

比如,我在md里面写下这一段

![](https://www.bilibili.com/video/BV1DV4y1A7L2/?spm_id_from=autoNext&vd_source=03cbd7abd895a5bdcae9f95e5e19b0b8)

然后进入阅读模式,一定要进入阅读模式,就能看到嵌入的视频
image

如果要maoxian支持这个,我想只需要从html里面获取到视频的链接就行了,print出符合上面格式的语法是一个很简单的事情.视频显示或者播放的事情交给md的editor(比如ob这种)去实现.

如果说想下载下来,那又是另外一回事了.

  1. 首先还是需要解析URL
  2. 把URL丢给lux,或者其他下载工具
  3. 然后把本地的视频的URL以前面说的语法格式放到md里面

这个时候假设有本地的ruby,这些事情交给ruby程序做就好了.

我觉得理论上可行,但是我不会ruby....

而且我对网络也不了解.....

我做的东西很底层,但是原理上,我觉得没什么问题.上面这些步骤python我能写得出来.

对于我来讲唯一的难点,在于我不熟悉html,找视频URL不一定能找对.但是只要告诉我要parse的关键字,我肯定能找到URL

@wieniawski-lai
Copy link
Author

嗯,作为一个不懂ruby和javascript的人,clone了maoxian的repo,然后扒了一下代码.

我上面说的应该有不对的地方

  1. web端会发msg给rb,告诉他需要download image
  2. image的URL是web端,js找出来的
  3. 根据2,我上面说的在ruby去解析video的URL的做法就不对,应该在js做
  4. js解析到video的URL之后,发msg给rb
  5. rb从config得到路径信息,然后开始download,似乎类似的事情都是在/lib/msg-handler/default.rb里面做的?
  6. 如果不download的话,在md里面insert URL的活,似乎也应该在rb里面做.
  7. 对于6,因为在没有native rb的时候,save到md的image是一个在线的URL,在有native rb的时候,才把这个在线的URL换成了本地的URL,所以我猜更改URL这件事情是在rb做的.所以6也应该在rb做.
  8. 但是很遗憾,我没有找到7里面改image的URL的代码.

嗯,我只能猜到这么多了

@wieniawski-lai
Copy link
Author

嗯,我又扒了一下,再猜

上面提到的更新md里面的image的URL的工作实在/lib/vnote/history.rb里面? self.refresh或者self.refresh_v2?

@mika-cn
Copy link
Owner

mika-cn commented Jan 26, 2023

知乎的網頁結構確實發生了變更,已對毛線助手的 Plan 進行修正。


關於視頻的處理

抱歉,怪我沒說清楚。我主要是想從軟件功能的角度,來探討這個功能應該是怎麼樣的。下面是我的看法:

這裏所說的視頻,應該不包括由 Flash 技術,或者其他非 HTML5 技術渲染的視頻,這些視頻的渲染技術各個網站都不同,難以統一處理。 再考慮到如果一張網頁的內容就是一個長視頻,那麼保存該網頁就直接保存視頻就好了。 這種應該使用其他專業的視頻下載工具去保存,而非使用裁剪擴展去處理。

那麼我們真正想保存的就是一些時長較短的由 HTML5 技術(即由 <video> )引入的視頻。那麼支持使用遠程鏈接就沒有必要了,直接下載下來,也能避免視頻失效。

至於保存成 MD 該如何保存,是保存成鏈接還是某種格式,直接提供模板讓用戶自己編寫。當然用戶也可以選擇不保存一切視頻。

關於 MaoXian 裏面,文件的下載和保存

現在文件的下載都統一放到瀏覽器裏面做,因爲這樣可以利用瀏覽器的環境(比如:使用了代理的網絡環境,或者是利用瀏覽器自身的緩存機制)。而保存成文件,則是根據用戶的不同配置,由不同的程序處理(如: 瀏覽器本身的下載功能,本地程序(即 ruby 端))

Web 資源 URL 的獲取,是在裁剪過程中由瀏覽器拿到。同時 MaoXian 還會在此過程中計算出該資源的存儲路徑以及在文檔中的引用路徑,並生成一個一個的下載任務(Task),下載後,再根據用戶的配置,由對應的程序去保存。

至於你看到的在「本地程序」ruby 端那邊有下載文件的代碼,那個是早先的版本有支持過:在 ruby 這邊下載文件。但後面發現,下載功能放到瀏覽器這邊,更能利用瀏覽器的緩存,且省去了在 ruby 端配置代理環境。

在没有native rb的时候,save到md的image是一个在线的URL,在有native rb的时候,才把这个在线的URL换成了本地的URL

這個認知是錯的,不管你在設置頁面上的處理程序是啥,MaoXian 都會把圖片下載下來,並把對應的路徑改成本地路徑(這也是 MaoXian 需要做好的核心功能,如果你發現裁剪下來後,路徑還是引用的是網站的路徑,則是出現 Bug)。如果你之前是因爲這個原因而去安裝的「本地程序」,則「本地程序」是可以不安裝的。

之前許多用戶要求我對接 Obsidian ,我試用了下後,發現根本就不需要安裝 「本地程序」或者做任何的對接。只需要在設置的存儲設置哪裏把路徑配置好,Obsidian 就能識別由 MaoXian 裁剪下來的 Markdown 文件。


最後很佩服你在不懂代碼語言的情況下,敢於深入源碼去理代碼邏輯。雖然 MaoXian 不是一個很複雜的軟件,但其源碼還是具有一定的複雜度的,理代碼邏輯時,會有點繞。你在那麼有限的時間內,能找到一些關鍵代碼,已經很厲害了。如果換成是我,用這麼短的時間,去翻一個用我不認識的語言寫的項目,我估計會在代碼的邏輯里找不到北 :)

@wieniawski-lai
Copy link
Author

wieniawski-lai commented Feb 7, 2023

See my comment below

知乎的網頁結構確實發生了變更,已對毛線助手的 Plan 進行修正。

關於視頻的處理

抱歉,怪我沒說清楚。我主要是想從軟件功能的角度,來探討這個功能應該是怎麼樣的。下面是我的看法:

這裏所說的視頻,應該不包括由 Flash 技術,或者其他非 HTML5 技術渲染的視頻,這些視頻的渲染技術各個網站都不同,難以統一處理。 再考慮到如果一張網頁的內容就是一個長視頻,那麼保存該網頁就直接保存視頻就好了。 這種應該使用其他專業的視頻下載工具去保存,而非使用裁剪擴展去處理。

同意,这也是我说的,把URL丢给lux去下载.当然,如果有更好更简单的办法也行.

那麼我們真正想保存的就是一些時長較短的由 HTML5 技術(即由 <video> )引入的視頻。那麼支持使用遠程鏈接就沒有必要了,直接下載下來,也能避免視頻失效。

额,我不懂HTML5,我同意可以选择的下载下来到本地(当视频文件太大的时候,我可以选择不下载)

至於保存成 MD 該如何保存,是保存成鏈接還是某種格式,直接提供模板讓用戶自己編寫。當然用戶也可以選擇不保存一切視頻。

關於 MaoXian 裏面,文件的下載和保存

現在文件的下載都統一放到瀏覽器裏面做,因爲這樣可以利用瀏覽器的環境(比如:使用了代理的網絡環境,或者是利用瀏覽器自身的緩存機制)。而保存成文件,則是根據用戶的不同配置,由不同的程序處理(如: 瀏覽器本身的下載功能,本地程序(即 ruby 端))

Web 資源 URL 的獲取,是在裁剪過程中由瀏覽器拿到。同時 MaoXian 還會在此過程中計算出該資源的存儲路徑以及在文檔中的引用路徑,並生成一個一個的下載任務(Task),下載後,再根據用戶的配置,由對應的程序去保存。

至於你看到的在「本地程序」ruby 端那邊有下載文件的代碼,那個是早先的版本有支持過:在 ruby 這邊下載文件。但後面發現,下載功能放到瀏覽器這邊,更能利用瀏覽器的緩存,且省去了在 ruby 端配置代理環境。

在没有native rb的时候,save到md的image是一个在线的URL,在有native rb的时候,才把这个在线的URL换成了本地的URL

這個認知是錯的,不管你在設置頁面上的處理程序是啥,MaoXian 都會把圖片下載下來,並把對應的路徑改成本地路徑(這也是 MaoXian 需要做好的核心功能,如果你發現裁剪下來後,路徑還是引用的是網站的路徑,則是出現 Bug)。如果你之前是因爲這個原因而去安裝的「本地程序」,則「本地程序」是可以不安裝的。

嗯,处理视频路径的逻辑其实是和处理图片路径的逻辑是一样的,方法也应该类似.您也可以认为是一个核心功能的bonus.

之前許多用戶要求我對接 Obsidian ,我試用了下後,發現根本就不需要安裝 「本地程序」或者做任何的對接。只需要在設置的存儲設置哪裏把路徑配置好,Obsidian 就能識別由 MaoXian 裁剪下來的 Markdown 文件。

最後很佩服你在不懂代碼語言的情況下,敢於深入源碼去理代碼邏輯。雖然 MaoXian 不是一個很複雜的軟件,但其源碼還是具有一定的複雜度的,理代碼邏輯時,會有點繞。你在那麼有限的時間內,能找到一些關鍵代碼,已經很厲害了。如果換成是我,用這麼短的時間,去翻一個用我不認識的語言寫的項目,我估計會在代碼的邏輯里找不到北 :)

证明您的代码写得比较好,我才能猜得到一些东西

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants