GithubHelp home page GithubHelp logo

Support text layers about psd HOT 5 OPEN

chinedufn avatar chinedufn commented on August 18, 2024
Support text layers

from psd.

Comments (5)

chinedufn avatar chinedufn commented on August 18, 2024 1

Hey. Just a heads up that this is still on my radar but I haven't gotten to it yet. Not sure how time sensitive it is for you.

from psd.

chinedufn avatar chinedufn commented on August 18, 2024

Hey there.

Text layers aren't current supported, but I'd love for them to be supported in psd.

The first step would be to check the spec to find out how text is stored.

Followed by parsing out the data from the appropriate section.


So, it currently isn't possible in psd, but it's definitely possible to support.

from psd.

ok-nick avatar ok-nick commented on August 18, 2024

@chinedufn I've never done something like this, but it seems really interesting. I've actually hit a bit of a snag and wondering you had any suggestions.

In the file src/sections/layer_and_mask_information_section/mod.rs, at the bottom, I check if the key is TySh and read all that info by doing (psuedocode):

cursor.read_2()?; // Version
cursor.read(48)?; // Transformation
cursor.read_2()?; // Text version
cursor.read_4()?; // Descriptor version

The text version returns [0, 50], while the descriptor version returns [0, 0, 0, 16], which seems correct?

From here I get into the actual structure and as it says, I read the unicode string, which seems to be just an empty string, at least in my psd:

cursor.read_unicode_string()?; // name from classID

After this, I read the classID, this is where I implement a simple yet exact replica of the described method into the cursor:

pub fn read_ascii_string(&mut self) -> Result<String, Error> {
	let mut length = self.read_u32()?;
	if length == 0 {
		length = 4;
	}

	let mut result = String::new();
	for _ in 0..length {
		let bytes = self.read_u8()?;
		result.push(bytes as char);
	}

	Ok(result)
}
cursor.read_ascii_string()?; // classID

I've implemented a little past this point, but it seems that when I call read_ascii_string, it has a length of 21624 characters, the image below is what it ends up returning:
image

Any suggestions on what I could or am doing wrong?

from psd.

chinedufn avatar chinedufn commented on August 18, 2024

I'm excited that you're diving in here. I'm more than happy to help wherever I can.

Could you make a really simple, small PSD file with a text layer in it and then add it to the fixtures folder

Then add a text_layer.rs to the integration tests folder along with a failing test case. (Let me know if you need any help on how to do this).

From there, if you can push up your code I can pull it and take a look and see if I notice anything.

Thanks for diving into this. I'm glad that it looks like you're close to having it working.

from psd.

ok-nick avatar ok-nick commented on August 18, 2024

@chinedufn https://github.com/ok-nick/psd
cargo test --test layer_and_mask_information_section text_layer -- --exact
The test is located in tests/layer_and_mast_information_section.rs at the bottom.

from psd.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.